在wpf中将字符串解析为json对象?

时间:2017-11-04 14:13:23

标签: c#

我有一个像这样的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,所以请提前帮助,这将是非常有帮助的!

1 个答案:

答案 0 :(得分:0)

我可以在这里看到两个主要问题,还有一个。

1)如果你没有可以将JSON反序列化的特定类,那么你必须依赖一些“类字典”结构(例如dynamicJToken)才能够访问所有字段。但是,您提供的数据似乎是结构化的,因此可以考虑创建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);

希望这有帮助!