Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C#中反序列化JSON?_Json_C# 4.0_Deserialization - Fatal编程技术网

如何在C#中反序列化JSON?

如何在C#中反序列化JSON?,json,c#-4.0,deserialization,Json,C# 4.0,Deserialization,有人能帮助我以这种格式反序列化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();

有人能帮助我以这种格式反序列化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;}
}
当我运行此代码时,名称和年龄属性会不断得到null和空字符串。如果有人能帮助我,我将不胜感激。

解决方案 我的解决方案非常简单,但您必须安装:

实例
使用Newtonsoft.Json;
变量url=”http://your-url";
var json=JsonConvert.DeserializeObject(新的WebClient().DownloadString(url));
列表用户=新列表();
foreach(json中的var用户)
{
users.Add(新用户()
{
name=user.name,
年龄=用户年龄
});
}
解决方案 我的解决方案非常简单,但您必须安装:

实例
使用Newtonsoft.Json;
变量url=”http://your-url";
var json=JsonConvert.DeserializeObject(新的WebClient().DownloadString(url));
列表用户=新列表();
foreach(json中的var用户)
{
users.Add(新用户()
{
name=user.name,
年龄=用户年龄
});
}

使用内置类也可以。见示例:

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);
}
WebRequest-request=WebRequest.Create(“url”);
WebResponse=request.GetResponse();
使用(Stream=response.GetResponseStream())
{
类型serializationTargetType=typeof(列表);
DataContractJsonSerializer jsonSerializer=新的DataContractJsonSerializer(serializationTargetType);
List jsonDeserialized=(List)jsonSerializer.ReadObject(流);
}

使用内置类也可以。见示例:

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);
}
WebRequest-request=WebRequest.Create(“url”);
WebResponse=request.GetResponse();
使用(Stream=response.GetResponseStream())
{
类型serializationTargetType=typeof(列表);
DataContractJsonSerializer jsonSerializer=新的DataContractJsonSerializer(serializationTargetType);
List jsonDeserialized=(List)jsonSerializer.ReadObject(流);
}

如果您需要的是对来自web服务器的响应进行反序列化,那么我将使用一些框架来完成所有这些


我已经使用过,而且效果很好。

如果您需要的是对来自web服务器的响应进行反序列化,我会使用一些框架来完成所有这些


我已经使用过,而且效果很好。

您可以定义反映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);
}
var serializer=newJavaScriptSerializer();
var rows=serializer.Deserialize(json);
foreach(行中的变量行)
{
Write(“名称:{0}和年龄:{1}”,row.Person.name,row.Person.age);
}

您可以定义反映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);
}
var serializer=newJavaScriptSerializer();
var rows=serializer.Deserialize(json);
foreach(行中的变量行)
{
Write(“名称:{0}和年龄:{1}”,row.Person.name,row.Person.age);
}

我必须在foreach循环中调用item.person.name和item.person.age,并确保person类中的所有属性都是string类型。

我必须在foreach循环中调用item.person.name和item.person.age,并确保person类中的所有属性都是string类型。

您正在映射到person类,但是在反序列化程序中使用“auto”类?您确定这是有效的JSON吗?我想你需要更多的
关于
“person”
似乎同意meI必须在foreach循环中调用item.person.name和item.person.age。你可能的副本映射到person类,但是在你的反序列化器中你使用了“auto”类?你确定这是有效的JSON吗?我想你需要更多的
关于
“person”
似乎同意meI必须在foreach循环中调用item.person.name和item.person.age。这可能重复一次就行不通了。OP显示的JSON结构并不表示
person
的数组。因此,使用
person[]
作为类型将使序列化程序崩溃。这不起作用。OP显示的JSON结构并不表示
person
的数组。因此,使用
person[]
作为类型将使序列化程序崩溃。