有人可以帮我正确地以这种格式反序列化json:
[
{person: {name: "James", age:26}},
{person: {name: "Mary", age:36}},
{person: {name: "Kofi", age:46}}
]
我正在使用的代码如下:
WebRequest request = WebRequest.Create("url");
WebResponse response = request.GetResponse();
string json;
using (var sr = new StreamReader(response.GetResponseStream()))
{
json = sr.ReadToEnd();
}
var serializer = new JavaScriptSerializer();
var persons= serializer.Deserialize<List<response>>(json);
foreach (var item in persons)
{
Console.Write("name:" + item.name + " and age: " + item.age);
}
我要映射的课程如下:
public class person
{
public string name{get;set;}
public int age{get; set;}
}
public class response
{
public person person {get;set;}
}
运行此代码时,我一直为名称和年龄属性获取空值和空字符串。如果有人可以帮助我,我会非常感激。
答案 0 :(得分:5)
使用内置DataContractJsonSerializer类也是可能的。见例:
WebRequest request = WebRequest.Create("url");
WebResponse response = request.GetResponse();
using (Stream stream = response.GetResponseStream())
{
Type serializationTargetType = typeof(List<person>);
DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(serializationTargetType);
List<person> jsonDeserialized = (List<person>)jsonSerializer.ReadObject(stream);
}
答案 1 :(得分:3)
我的解决方案非常简单,但您必须安装:
using Newtonsoft.Json;
var url = "http://your-url";
var json = JsonConvert.DeserializeObject<Person[]>(new WebClient().DownloadString(url));
List<Person> users = new List<Person>();
foreach (var user in json)
{
users.Add(new Person()
{
name = user.name,
age = user.age
});
}
答案 2 :(得分:2)
您可以定义反映您的JSON结构的模型:
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
public class Row
{
public Person Person { get; set; }
}
然后反序列化为一个行数组:
var serializer = new JavaScriptSerializer();
var rows = serializer.Deserialize<Row[]>(json);
foreach (var row in rows)
{
Console.Write("name: {0} and age: {1}", row.Person.Name, row.Person.Age);
}
答案 3 :(得分:1)
我必须在foreach循环中调用item.person.name和item.person.age,并确保person类中的所有属性都是string类型。
答案 4 :(得分:0)
如果您需要的是从Web服务器反序列化响应,我会使用一些框架来完成所有这些。
我使用了http://restsharp.org/,效果很好。