繁体   English   中英

如何将JSON对象数组反序列化为c#结构

[英]How to deserialize JSON array of objects to c# structure

我有一个json字符串,它是通过序列化一个对象数组创建的:

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

如何将其反序列化为某个可迭代的C#结构? 我已经尝试过这段代码了,但是我得到No parameterless constructor defined for type of 'System.String'. 错误:

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

我想要获得的是一个可迭代的结构来获取每个'html'对象。

为每个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

您可以使用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; }
}

文档网站显然现在不能正常工作......但我会尝试使用JSON.NET( http://james.newtonking.com/projects/json/help/

有几种方法可以做到。 您可以以非常动态的非严格方式反序列化,也可以定义一个与json对象完全匹配的对象,并反序列化为该对象。 如果有许多格式的JSON你必须序列化我建议使用模式。

nekman的答案不完全正确,属性应该是JsonPropery而不是DataMember。 (在这种情况下,您可以删除该属性,因为反序列化器不关心大写H)

public class HtmlItem
{
   [JsonProperty("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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM