【问题标题】:Parse JSON using c#使用 C# 解析 JSON
【发布时间】:2018-09-12 10:32:08
【问题描述】:

我一直在使用 NewtonSoft JSON Convert 库来解析 JSON 字符串并将其转换为 C# 对象。我无法将其转换为 C# 对象,因为我无法使用此 JSON 字符串创建 C# 类。

这是 JSON 字符串:

{  
   "appId":"G9RNVJYTS6SFY",
   "merchants":{  
      "RZX9YMHSMP6A8":[  
         {  
            "objectId":"A:G9RNVJYTS6SFY",
            "type":"DELETE",
            "ts":1522736100111
         }
      ],
      "MNOVJT2ZRRRSC":[  
         {  
            "objectId":"A:G9RNVJYTS6SFY",
            "type":"CREATE",
            "ts":1522736100111
         }
      ]
   },
   ... and so on
}

名称 RZX9YMHSMP6A8 和 MNOVJT2ZRRRSC 因请求而异

已使用

var dict = JsonConvert.DeserializeObject<Dictionary<string, RootObject>>(JSON);

执行此行时出现异常

将值“G9RNVJYTS6SFY”转换为类型“RootObject”时出错。路径“appId”,第 1 行,位置 24。

public class Merchant
{
    public string objectId
    {
        get;
        set;
    }
    public string type
    {
        get;
        set;
    }
    public long ts
    {
        get;
        set;
    }
}

public class Merchants
{
    public List<Merchant> merchant
    {
        get;
        set;
    }
}

public class RootObject
{
    public string appId
    {
        get;
        set;
    }
    public Merchants merchants
    {
        get;
        set;
    }
}

【问题讨论】:

标签: c# json json.net


【解决方案1】:

您可以将此json转换为c#类结构,使用Dictionary来保存商家(其中ID是string键):

public class RootObject
{
    public string AppId { get; set; }
    public Dictionary<string, List<ChildObject>> Merchants { get; set; }
}

public class ChildObject
{
    public string ObjectId { get; set; }
    public string Type { get; set; }
    public long Ts { get; set; }
}

然后您可以像这样遍历子对象:

foreach (var kvp in rootObject.Merchants) 
{
    var childObjects = kvp.Value;
    foreach (var childObject in childObjects) {
        Console.WriteLine($"MerchantId: {kvp.Key}, ObjectId: {childObject.ObjectId}, Type: {childObject.Type}");
    }
}

【讨论】:

  • 谢谢@nbokmans。你节省了我的时间。我从昨天开始就在尝试这个。还有一个问题如何遍历 ChildObject?
猜你喜欢
  • 2016-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-14
  • 2020-05-31
相关资源
最近更新 更多