2015-03-02 30 views
6

所以,这是我的课:获取C#-object阵出一个JSON字符串的

public class User 
{ 
    public User() { } 

    public string Username { get; set; } 
    public string Password { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 

} 

这是我的JSON字符串的样子:

{"results":[{"FirstName":"firstname1","LastName":"lastname1","Password":"TestPassword","Username":"TestUser","createdAt":"2015-03-02T17:36:25.232Z","objectId":"a8bKXDg2Y2","updatedAt":"2015-03-02T20:35:48.755Z"},{"FirstName":"firstname2","LastName":"lastname2","Password":"TestPw","Username":"TestUser2","createdAt":"2015-03-02T20:35:26.604Z","objectId":"2XPIklE3uW","updatedAt":"2015-03-02T20:35:53.712Z"}]} 

我想从中获得用户[]用户。 我的问题是{“结果:”:[....]} - 部分。

我试着这样说:

JavaScriptSerializer js = new JavaScriptSerializer(); 
User[] user = js.Deserialize<User[]>(jsonString); 

,但我觉得结果的部分以某种方式搞乱一切。 解决此问题的最佳方法是什么?

+2

只要你有JSON我总是建议去http://json2csharp.com。它将生成需要反序列化的类。 – 2015-03-02 20:44:03

回答

7

尝试定义的包装模式,将反映您的JSON结构:

public class MyModel 
{ 
    public User[] Results { get; set; } 
} 

现在你可以继续前进,反序列化JSON字符串返回到该包装模式:

JavaScriptSerializer js = new JavaScriptSerializer(); 
MyModel model = js.Deserialize<MyModel>(jsonString); 

和现在有什么阻止您将用户收回:

User[] user = model.Results; 
+0

谢谢,这可能会奏效 - 但是为每个班级创建包装是一种好方法吗? – 2015-03-02 20:43:37

+1

当然这是一个好方法。您必须完全匹配您正在反序列化的JSON结构。否则,您如何期望JSON序列化程序自动知道您要实现的目标?它通过类型自省和属性匹配来工作。所以确保序列化/反序列化时你有适当的结构。 – 2015-03-02 20:44:15

+0

非常感谢!帮了我很多。 (我需要等待大约7分钟才能接受这个答案,我会在稍后做) – 2015-03-02 20:47:45

1

您需要在模型

public class Data 
{ 
    public User[] results { get; set; } 
} 

另一层然后反序列化Data