{회전} c \ # JSON 을 해석 하 는 몇 가지 방법

30756 단어 json
목록
  • (?)
  • [-]
  • 대비
  • 준비 데이터
  • DataContractJSonSerializer 사용 하기
  • JavaScriptSerializer 사용 하기

  •  
    출처: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
    웹 환경 에서 만 사용 가능
    아니.
    JavaScriptSerializerSystem.Web.Script.SerializationJsonArray 
    JsonObject 
    Silverlight 에서 만 사용 할 수 있 습 니 다.
    예.
    JsonValueSystem.JsonJsonConvert 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<intintint> 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[] { 241 })) 
                        ); 
        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" 
          } 
        } 

    좋은 웹페이지 즐겨찾기