【问题标题】:Get C#-Object-Array out of a JSON-String从 JSON 字符串中获取 C#-Object-Array
【发布时间】:2015-05-03 08:25:12
【问题描述】:

所以,这是我的课:

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-String 的样子:

{"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"}]}

我想从中获得一个 User[] 用户。 我的问题是 {"results:":[....]}-Part.

我试过这样:

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

但我认为结果部分以某种方式将一切搞砸了。 解决这个问题的最佳方法是什么?

【问题讨论】:

  • 只要你有 JSON,我总是推荐去json2csharp.com。它将生成您需要反序列化的类。

标签: c# arrays json object


【解决方案1】:

尝试定义一个能够反映您的 JSON 结构的包装模型:

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

现在您可以继续将您的 JSON 字符串反序列化回此包装模型:

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

现在没有什么可以阻止您取回用户集合了:

User[] user = model.Results;

【讨论】:

  • 谢谢,这可能有效 - 但这是为每个类创建包装器的好方法吗?
  • 当然是个好办法。您必须与要反序列化的 JSON 结构完全匹配。否则,您如何期望 JSON 序列化程序自动知道您要实现的目标?它通过类型自省和属性匹配来工作。因此,请确保在序列化/反序列化时具有正确的结构。
  • 非常感谢!帮了我很多。 (我需要等待大约7分钟才能接受这个答案,我稍后再做)
【解决方案2】:

你的模型需要另外一层

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

然后反序列化Data

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-31
    • 1970-01-01
    相关资源
    最近更新 更多