如何将一个JSON对象数组反序列化为C#匿名类型?

20

我没有问题反序列化单个json对象

string json = @"{'Name':'Mike'}";

转化为 C# 匿名类型:

var definition = new { Name = ""};
var result = JsonConvert.DeserializeAnonymousType(json, definition);

但是当我有一个数组:

string jsonArray = @"[{'Name':'Mike'}, {'Name':'Ben'}, {'Name':'Razvigor'}]";

我卡住了。

怎么办呢?


1
您可以像匿名数组一样反序列化它:var result = JsonConvert.DeserializeAnonymousType(jsonArray, new[] { new { Name = "" } }); - Tao Zhu
3个回答

29

答案是:

string json = @"[{'Name':'Mike'}, {'Name':'Ben'}, {'Name':'Razvigor'}]";

var definition = new[] { new { Name = "" } };

var result = JsonConvert.DeserializeAnonymousType(json, definition);
当然,由于result是一个数组,您将这样访问单个记录:
string firstResult = result[0].Name;

您还可以在其上调用.ToList()和类似的方法。


3
你可以通过这种方法将内容反序列化为动态对象。
dynamic result = JsonConvert.DeserializeObject(jsonArray);

你可以像这样访问它: var result2 = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic[]>(jsonArray); result2[0].Name - Fatehi_Alqadasi

3

一种方法是在您的JSON数组字符串中放置标识符。

以下代码对我有效:

var typeExample = new { names = new[] { new { Name = "" } } };
string jsonArray = @"{ names: [{'Name':'Mike'}, {'Name':'Ben'}, {'Name':'Razvigor'}]}";

var result = JsonConvert.DeserializeAnonymousType(jsonArray, typeExample);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接