繁体   English   中英

使用C#解析JSON

[英]Parse JSON using c#

我一直在使用NewtonSoft JSON转换库来解析并将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;
    }
}

您可以使用Dictionary将json转换为c#类结构,以容纳商家(其中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}");
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM