如何将对象的JSON数组反序列化为c#结构
我有一个json字符串,它是通过序列化对象数组创建的:如何将对象的JSON数组反序列化为c#结构,c#,asp.net,json,deserialization,C#,Asp.net,Json,Deserialization,我有一个json字符串,它是通过序列化对象数组创建的: [ { "html": "foo" }, { "html": "bar" } ] 如何将其反序列化为某种可移植的C#结构?我已经尝试了这段代码,但是我得到的没有为'System.String'类型定义无参数构造函数。错误: string[] htmlArr = new JavaScriptSerializer().Deserialize<String[]>(htm
[
{
"html": "foo"
},
{
"html": "bar"
}
]
如何将其反序列化为某种可移植的C#结构?我已经尝试了这段代码,但是我得到的没有为'System.String'类型定义无参数构造函数。
错误:
string[] htmlArr = new JavaScriptSerializer().Deserialize<String[]>(html);
string[]htmlar=newJavaScriptSerializer()。反序列化(html);
我想要得到的是一个iterable结构,用于获取每个“html”对象。您可以使用(可从NuGet获得)
为每个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
公共类HtmlItem
{
[DataMember(Name=“html”)]
公共字符串Html{get;set;}
}
JavaScriptSerializer ser=新的JavaScriptSerializer();
//连载
字符串html=ser.Serialize(新列表{
新的HtmlItem{Html=“foo”},
新的HtmlItem{Html=“bar”}
});
//反序列化并打印html项目。
列表htmlist=ser.Deserialize(html);
htmlist.ForEach((item)=>Console.WriteLine(item.Html));//富吧
文档网站显然现在不起作用。。。但是我会尝试使用JSON.NET()
有几种方法可以做到这一点。您可以以非常动态而非严格的方式进行反序列化,或者您可以定义一个与json对象完全匹配的对象,并将其反序列化为json对象。如果有许多JSON格式,您必须序列化,我建议您使用模式。nekman的回答不完全正确,属性应该是JSONProperty而不是DataMember。(在这种情况下,您可以删除该属性,因为反序列化程序不关心大写字母H)
公共类HtmlItem
{
[JsonProperty(“html”)]
公共字符串Html{get;set;}
}
JavaScriptSerializer ser=新的JavaScriptSerializer();
//连载
字符串html=ser.Serialize(新列表{
新的HtmlItem{Html=“foo”},
新的HtmlItem{Html=“bar”}
});
//反序列化并打印html项目。
列表htmlist=ser.Deserialize(html);
htmlist.ForEach((item)=>Console.WriteLine(item.Html));//富吧
签出上一篇stackoverflow帖子,或者感谢您提供的链接,我第一次尝试这样做时没有创建额外的类,但我想我可以这样做:)可能重复我接受您的答案,因为我最终在问题注释中使用了类似的链接。添加此DataMember
decorator的目的是什么?谢谢!我认为DataMember属性中的名称用于将JSON属性映射到实例属性。阅读有关DataMember
public class Item
{
public string Html { get; set; }
}
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
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