我有一个像这样的json String(数组):
[{"user":{"name":"abc","gender":"Male","birthday":"1987-8-8"}},
{"user":{"name":"xyz","gender":"Female","birthday":"1987-7-7"}}]
并且只想使用.net4.0框架将它解析为json对象,我不能使用DataContractJsonSerializer
,因为它需要类,我在1分钟内通过Web服务接收动态数据,这些数据不断变化,它是在Name-value格式中,我尝试使用JavaScriptSerializer
,但我无法在我的vs2010项目.net4.0支持的框架中添加system.web.extension,我不想使用任何第三方库,实际上我是wpf中的New-bie,所以请提前帮助,这将是非常有帮助的!
答案 0 :(得分:0)
我可以在这里看到两个主要问题,还有一个。
1)如果你没有可以将JSON反序列化的特定类,那么你必须依赖一些“类字典”结构(例如dynamic
或JToken
)才能够访问所有字段。但是,您提供的数据似乎是结构化的,因此可以考虑创建POCO以获得强类型结构的优势。使用现成的库可以轻松实现这两者。
2)你说你不想使用任何第三方库,但实际上没有任何问题。实际上你应该这样做,以避免重新发明轮子,如Tewr所说。事实上,使用Newtonsoft Json这样的行业标准库是完全没问题的,这样你就可以避免大量的错误,不必要的工作和未来的麻烦。如果你的观点是通过编写JSON(de)序列化程序来学习,那就完全没问题,但我建议不要在生产代码中使用它。
旁注:您提到通过Web服务接收数据,而您似乎只接收JSON数组(作为顶级对象)。它被认为是安全漏洞。更多信息可以在这里找到:
编辑2017-11-05 :
好的,所以你应该创建代表你的web服务响应的类(你可以使用名为Edit > Paste Special > Paste JSON As Classes
的VS的特性):
public class Response
{
public User[] users { get; set; }
}
public class User
{
public string Name { get; set; }
public string gender { get; set; }
public string birthday { get; set; }
}
现在使用Nuget安装包Newtonsoft.Json并使用以下代码,您将反序列化对.NET类的JSON响应:
string responseText = "";//Get it from web service
var response = JsonConvert.DeserializeObject<Response>(responseText);
希望这有帮助!