{회전} c \ # JSON 을 해석 하 는 몇 가지 방법
30756 단어 json
출처:http://soaspx.com/dotnet/csharp/csharp_20100713_5052.html
해양 대사 가 되 려 면 바다 속 의 물 한 방울 의 진짜 이름 을 알 아야 한다.
처음에는 JSON 배열 을 바 꾸 는 방법 을 찾 으 려 다 MSDN 에서 크게 뒤 집 혔 다.
검색 과정 에서 WCF = > DataContract = > DataMember = > DataContractJSonSerializer 라 는 명 사 를 만 날 수 밖 에 없습니다. 그 다음 에 네 임 스페이스 를 계속 도입 합 니 다.
이 경험 은 바로 나 로 하여 금 위 에서 인용 한 이 소설 에 존재 하 는 무당 의 말 을 연상 하 게 했다.정적 언어 는 정말 사람 을 미 치 게 한다. 끊임없이 준 비 를 한 후에 야 일 을 시작 할 수 있다.
대비
. NET 에서 흔히 볼 수 있 는 JSON 해석 방법
주요 클래스
네 임 스페이스
제한 하 다.
내장 LINQ 지원
Silverlight 사용 하기
JSONNET 사용 하기
통용한다
아니.
DataContractJsonSerializer
System.Runtime.Serialization.Json
웹 환경 에서 만 사용 가능
아니.
JavaScriptSerializer 、 System.Web.Script.Serialization 、 JsonArray
JsonObject
Silverlight 에서 만 사용 할 수 있 습 니 다.
예.
JsonValue 、 System.Json 、 JsonConvert 、 JArray 、 JObject
JValue
통용한다
예.
준비 데이터
실체 클래스:
[DataContract]
public class Person
{
[DataMember(Order = 0, IsRequired = true)]
public string Name { get; set; }
[DataMember(Order = 1)]
public int Age { get; set; }
[DataMember(Order = 2)]
public bool Alive { get; set; }
[DataMember(Order = 3)]
public string[] FavoriteFilms { get; set; }
[DataMember(Order = 4)]
public Person Child { get; set; }
}
:
Action<object> log = o => Console.WriteLine(o);
Func<int, int, int> add = (x, y) => x + y;
var p1 = new Person {
Age = 12,
Alive = true,
Name = "lj",
FavoriteFilms = new[] { "Up", "Avatar" }
};
var p2 = new Person() { Age = 28, Name = "cy", Child = p1 };
DataContractJSonSerializer 사용 하기
도움말 클래스:
// using System.Runtime.Serialization.Json;
/// <summary>
/// JSON, Javascript
/// </summary>
public static class JSON
{
public static T parse<T>(string jsonString)
{
using (var ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString)))
{
return (T)new DataContractJsonSerializer(typeof(T)).ReadObject(ms);
}
}
public static string stringify(object jsonObject)
{
using (var ms = new MemoryStream())
{
new DataContractJsonSerializer(jsonObject.GetType()).WriteObject(ms, jsonObject);
return Encoding.UTF8.GetString(ms.ToArray());
}
}
}
사용법:
//
var jsonString = JSON.stringify(new[] { p1, p2 });
log(jsonString == JSON.stringify(new List<Person>() { p1, p2 })); //true
log(jsonString);
// ,
JSON.parse<List<Person>>(jsonString);
//
JSON.parse<Person[]>(jsonString);
출력:
[{"Name":"lj","Age":12,"Alive":true,"FavoriteFilms":["Up","Avatar"],"Child":null
},{"Name":"cy","Age":28,"Alive":false,"FavoriteFilms":null,"Child":{"Name":"lj",
"Age":12,"Alive":true,"FavoriteFilms":["Up","Avatar"],"Child":null}}]
JavaScriptSerializer 사용 하기
// using System.Web.Script.Serialization;
var jser = new JavaScriptSerializer();
var json = jser.Serialize(new List<Person>() { p1, p2 });
var persons = jser.Deserialize<List<Person>>(json);
Silverlight 사용 하기
// using System.Json
var css = "{ /"#header/" : {background:/"red/"}, layout : [5,4,1],color:/"cyan/" }";
var style = JsonObject.Parse(css) as JsonObject;
(
from s in style
where s.Key == "color"
select (string)s.Value
).First().ToString();
// "cyan"
//
style["layout"][0] = 22;
var hd = style["#header"];
style["body>div+p"] = hd;
style.Remove("#header");
var bd = new JsonObject();
bd["border"] = "1px solid cyan";
style["body>div+p"]["#meta"] = bd;
style.ToString();
// {"layout":[22,4,1],"color":"cyan","body>div+p":{"background":"red","#meta":{"border":"1px solid cyan"}}}
JSON. NET 사용 하기
// using Newtonsoft.Json;
var json = JsonConvert.SerializeObject(new[] { p1, p2 });
var persons = JsonConvert.DeserializeObject<List<Person>>(json);
var ja = JArray.Parse(jsonString);
log(ja); // ,
출력:
[
{
"Name": "lj",
"Age": 12,
"Alive": true,
"FavoriteFilms": [
"Up",
"Avatar"
],
"Child": null
},
{
"Name": "cy",
"Age": 28,
"Alive": false,
"FavoriteFilms": null,
"Child": {
"Name": "lj",
"Age": 12,
"Alive": true,
"FavoriteFilms": [
"Up",
"Avatar"
],
"Child": null
}
}
]
LINQ:
var ageCount = ja.Select(j => (int)j["Age"]).Aggregate(add);
var q = from j in ja
where !j["Name"].Value<string>().Equals("lj")
select (int)j["Age"];
log(q.Aggregate(add) == ageCount); //false
기타:
// Linq to XML :
var jo = new JObject(
new JProperty("age", persons.Select( p => p.Age)),
new JProperty("funny", true),
new JProperty("array", new JArray(new[] { 2, 4, 1 }))
);
log(jo);
// JObject
var css = "{ /"#header/" : {background:/"red/"}, layout : [5,4,1] }";
var style = JObject.Parse(css);
var bd = new JObject();
bd["color"] = "1px solid cyan";
style["border"] = bd;
var hd = style["#header"];
style["body>div+p"] = hd;
hd.Parent.Remove();
style["layout"][0] = 22;
log(style);
출력:
{
"age": [
12,
28
],
"funny": true,
"array": [
2,
4,
1
]
}
{
"layout": [
22,
4,
1
],
"border": {
"color": "1px solid cyan"
},
"body>div+p": {
"background": "red"
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
콘텐츠 SaaS | JSON 스키마 양식 빌더Bloomreach Content를 위한 JSON Form Builder 맞춤형 통합을 개발합니다. 최근 Bloomreach Content SaaS는 내장 앱 프레임워크를 사용하여 혁신적인 콘텐츠 유형 필드를 구축할...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.