我试图反序列化一个Facebook朋友的图形API调用到一个对象列表。JSON对象看起来像:
{"data":[{"id":"518523721","name":"ftyft"},
{"id":"527032438","name":"ftyftyf"},
{"id":"527572047","name":"ftgft"},
{"id":"531141884","name":"ftftft"},
{"id":"532652067","name"...
List<EFacebook> facebooks = new JavaScriptSerializer().Deserialize<List<EFacebook>>(result);
它不起作用,因为原始对象无效。我怎么反序列化这个?
Newtonsoft。JSON是这类情况的一个很好的解决方案。也Newtonsof。JSON比JavaScriptSerializer, DataContractJsonSerializer更快。
在这个示例中,您可以执行以下操作:
var jsonData = JObject.Parse("your JSON data here");
然后可以将jsonData转换为JArray,并且可以在每次迭代中使用for循环获取数据。
另外,我还想补充一点:
for (int i = 0; (JArray)jsonData["data"].Count; i++)
{
var data = jsonData[i - 1];
}
使用动态对象和Newtonsoft序列化是一个很好的选择。
如果你使用的是。net Core 3.0,你可以使用System.Text.Json(现在是内置的)来反序列化JSON。
第一步是创建类来对JSON建模。有很多工具可以帮助解决这个问题,这里列出了一些答案。
一些选项是http://json2csharp.com, http://app.quicktype.io或使用Visual Studio(菜单编辑→粘贴特殊→将JSON粘贴为类)。
public class Person
{
public string Id { get; set; }
public string Name { get; set; }
}
public class Response
{
public List<Person> Data { get; set; }
}
然后你可以使用以下方法反序列化:
var people = JsonSerializer.Deserialize<Response>(json);
如果你需要添加设置,比如camelCase处理,然后像这样将序列化器设置传递给反序列化器:
var options = new JsonSerializerOptions() { PropertyNamingPolicy = JsonNamingPolicy.CamelCase };
var person = JsonSerializer.Deserialize<Response>(json, options);