【问题标题】:JSON Parsing C# modelJSON解析C#模型
【发布时间】:2015-01-04 02:12:44
【问题描述】:

我似乎无法解析一些 json 来将其转换为模型。

JSON:

{
    "status":"ok",
    "count":100,
    "data":[
        {"nickname":"God","id":null,"account_id":1000076613},
        {"nickname":"god0","id":null,"account_id":1005460397},
        {"nickname":"god1father","id":null,"account_id":1002495621},
        {"nickname":"God1Hand","id":null,"account_id":1003183995}]
}

我的模特:

public class UserModel
{
    public List<User> Users;
}

public class User
{

    public int AccountId { get; set; }

    public string Nickname { get; set; }

    public string Id { get; set; }

}

我的班级:

var client = new HttpClient();
var task = await client.GetAsync(APIWebAddress);
var jsonstring = await task.Content.ReadAsStringAsync();
if (jsonstring == null) return null;
var serializer = new JavaScriptSerializer();
UserModel model = serializer.Deserialize<UserModel>(jsonstring);

我遇到的问题是序列化程序。它没有正确返回模型,导致我稍后在尝试查看数据时得到空引用异常。我尝试过使用 JavaScriptSerializer 和 Json.Net 反序列化器。

【问题讨论】:

  • 您的数据模型不包含statuscount 的类型,尽管您可能并不关心这些。无论哪种方式,包含用户的列表都称为data,但在您的模型中,它称为Users。尝试改变它?
  • 如果jsonstring 为空,您的第四行将返回空。您确定 jsonstring 那时不为空吗?如果是这样,那么您使用哪个序列化程序并不重要,因为它永远不会到达那里。
  • 另外,你有AccountId而不是account_id

标签: c# asp.net-mvc json


【解决方案1】:

试试这个

模型(使用json2csharp生成)

public class User
{
    public string nickname { get; set; }
    public object id { get; set; }
    public int account_id { get; set; } // you cant change the name*
}

public class Users
{
    public string status { get; set; } // you cant skip this
    public int count { get; set; } // you cant skip this
    public List<User> data { get; set; }
}

序列化器

这里我们使用Json.NET

Users users =  JsonConvert.DeserializeObject<Users>(json);

DEMO on DotnetFiddle

*你可以用属性重命名它

【讨论】:

  • 只是为了添加一些额外的内容,您可以使用问题中的 JSON 使用 Visual Studio 获取这些类。打开cs 文件、Edit 菜单、Paste Special,然后打开Paste JSON as Classes。非常方便!
  • @DavidG 也喜欢!顺便说一句,您需要网络必需品才能解锁它。
  • 似乎工作正常,现在我在通过 RedirectToAction 传递变量传递实际数据时遇到问题。
  • @electrometro 提出另一个问题,但请先自行搜索。 google上有很多资源。
  • 其实找了好久。只是不知道使用什么关键字来创建类。
【解决方案2】:

您的代码中的问题在于:

UserModel model = serializer.Deserialize<UserModel>(jsonstring);

如下修改:

UserModel model = serializer.Deserialize<UserModel>(jsonstring.Result.ToString());

希望对你有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-01
    • 1970-01-01
    • 2017-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多