ひとつNET汎用JSON解析/構築クラスの実...

13321 ワード

ひとつNET汎用JSON解析/構築クラスの実装(c#)
はい.NET Framework 3.5にはJSONオブジェクトのシーケンス化ツールが用意されていますが、彼は強いタイプで、まずJSONオブジェクトのフォーマットでタイプを定義し、タイプにJSONシーケンス化特性を加えなければなりません.本稿では,JSONの解析とシーケンス化を実現する高度に柔軟なJSON汎用タイプ(JsonObject)を提供することを試みる.
JSONオブジェクトの内容は次のように仮定します.
行番号を隠す?JSON
  • 
    {
    
  • 
     orders: {
    
  • 
     date: '21:31:59',
    
  • 
     name: 'Xfrog',
    
  • 
     books: [{
    
  • 
     name: 'C#       ',
    
  • 
     publish: '2010-3-24'
    
  • 
     }, {
    
  • 
     name: 'C#       ',
    
  • 
     publish: '2009-10-16'
    
  • 
     }]
    
  • 
     },
    
  • 
     blog: 'http://www.cnblogs.com/xfrog'
    
  • 
    }
    

  • JsonObjectを使用して構築するには、次の3つの方法があります.方法1:
    行番号を隠す?C#
  • 
    //        
    
  • 
    JsonObject json = new JsonObject();
    
  • 
    json["orders"] = new JsonProperty(new JsonObject());
    
  • 
    json["blog"] = new JsonProperty("http://www.cnblogs.com/xfrog");
    
  • 
    
  • 
    JsonObject config = json.Properties<<SPAN style="COLOR: rgb(43,145,175)">JsonObject>("orders");
    
  • 
    json["orders"]["date"] = new JsonProperty(DateTime.Now.ToLongTimeString());
    
  • 
    json["orders"]["name"] = new JsonProperty("Xfrog");
    
  • 
    json["orders"]["books"] = new JsonProperty();
    
  • 
    JsonProperty book = json["orders"]["books"].Add(new JsonObject());
    
  • 
    book["name"] = new JsonProperty("C#       ");
    
  • 
    book["publish"] = new JsonProperty("2010-3-24");
    
  • 
    book = json["orders"]["books"].Add(new JsonObject());
    
  • 
    book["name"] = new JsonProperty("C#       ");
    
  • 
    book["publish"] = new JsonProperty("2009-10-16");
    

  • 方式2:
    行番号を隠す?C#
  • 
    //             
    
  • 
    JsonObject json2 = new JsonObject((a) =>
    
  • 
    {
    
  • 
        a["orders"] = new JsonProperty(new JsonObject((b) =>
    
  • 
        {
    
  • 
            b["date"] = new JsonProperty(DateTime.Now.ToLongTimeString());
    
  • 
            b["name"] = new JsonProperty("Xfrog");
    
  • 
            b["books"] = new JsonProperty();
    
  • 
            b["books"].Add(new JsonObject((c) =>
    
  • 
            {
    
  • 
                c["name"] = new JsonProperty("C#       ");
    
  • 
                c["publish"] = new JsonProperty("2010-3-24");
    
  • 
            }));
    
  • 
            b["books"].Add(new JsonObject((c) =>
    
  • 
            {
    
  • 
                c["name"] = new JsonProperty("C#       ");
    
  • 
                c["publish"] = new JsonProperty("2009-10-16");
    
  • 
            }));
    
  • 
        }));
    
  • 
        a["blog"] = new JsonProperty("http://www.cnblogs.com/xfrog");
    
  • 
    });
    

  • 方式3:
    行番号を隠す?C#
  • 
    //       Json  
    
  • 
    JsonObject newObj = new JsonObject(jsonStr);
    

  • Jsonオブジェクトのプロパティ値を取得する方法には、次の3つの方法があります.
    行番号を隠す?C#
  • 
    //      
    
  • 
    Console.WriteLine(newObj["orders"].GetValue<<SPAN style="COLOR: rgb(43,145,175)">JsonObject>()["books"].GetValue<<SPAN style="COLOR: rgb(43,145,175)">List<<SPAN style="COLOR: rgb(43,145,175)">JsonProperty>>()[1].GetValue<<SPAN style="COLOR: rgb(43,145,175)">JsonObject>()["name"].Value);
    
  • 
    //           
    
  • 
    Console.WriteLine(newObj["orders"].Object["books"].Items[1].Object["name"].Value);
    
  • 
    //         ,          
    
  • 
    Console.WriteLine(newObj["orders"]["books"][1]["name"].Value);
    

  • ToString関数を直接使用して、JsonObjectをJson文字列に変換します.
    行番号を隠す?C#
  • 
    String jsonStr = json.ToString();
    

  • 注意:
    私は、ToString関数をリロードする際、文字列をJavscript文字列タイプ(すなわち、エスケープが必要な文字の処理)に変換していません.もちろん、実現するのも極めて簡単です.また、Stringパラメータ付きのToStringについても、私は特殊な処理をするために、興味のある友达が自分で実現することができます.
    Technoratiラベル:.NET, JSON, C#