9

オブジェクトの配列をシリアル化して作成された json 文字列があります。

[
    {
        "html": "foo"
    },
    {
        "html": "bar"
    }
]

反復可能な C# 構造に逆シリアル化するにはどうすればよいですか? このコードを試しましたが、No parameterless constructor defined for type of 'System.String'.エラーが発生します:

string[] htmlArr = new JavaScriptSerializer().Deserialize<String[]>(html);

私が受け取りたいのは、各「html」オブジェクトを取得するための反復可能な構造です。

4

4 に答える 4

11

JSON オブジェクトごとにクラスを使用します。例:

public class HtmlItem
{
   [DataMember(Name = "html")]
   public string Html { get; set; }
}

JavaScriptSerializer ser = new JavaScriptSerializer();          

// Serialize
string html = ser.Serialize(new List<HtmlItem> {
   new HtmlItem {  Html = "foo" },
   new HtmlItem {  Html = "bar" }
});

// Deserialize and print the html items.        
List<HtmlItem> htmlList = ser.Deserialize<List<HtmlItem>>(html);
htmlList.ForEach((item) => Console.WriteLine(item.Html)); // foo bar
于 2012-12-30T23:14:50.687 に答える
4

Newtonsoft Json.NET (NuGet から入手可能)を使用できます。

string json = @"[{""html"": ""foo""},{""html"": ""bar""}]";
var items = JsonConvert.DeserializeObject<List<Item>>(json);

どこ

public class Item
{
    public string Html { get; set; }
}
于 2012-12-30T23:13:19.237 に答える
2

ドキュメント サイトは現在機能していないようです... しかし、JSON.NET を使用してみます ( http://james.newtonking.com/projects/json/help/ )

いくつかの方法があります。非常に動的ではなく厳密な方法で逆シリアル化するか、json オブジェクトと正確に一致するオブジェクトを定義してそれに逆シリアル化することができます。JSON の形式が多数ある場合は、シリアル化する必要があります。スキーマを使用することをお勧めします。

于 2012-12-30T23:15:14.697 に答える