将JSON表示为C#类

时间:2013-11-01 23:28:22

标签: c# json deserialization

我想将此JSON反序列化为C#类,但我需要首先定义该类:

{
"Prods": [
    {
        "ID": {
            "1001": [
                {
                    "Name": "Name1",
                    "Prod": "XXX"
                },
                {
                    "Name": "Name2",
                    "Prod": "XXXX"
                }
            ]
        }
    },
    {
        "ID": {
            "2001": [
                {
                    "Name": "Name3",
                    "Prod": "XXX-000"
                },
                {
                    "Name": "Name4",
                    "Prod": "XXXX-1111"
                }
            ]
        }
    }
]
}

我想将它反序列化为类似的东西,但也不确定我的JSON结构是否适合它:

public class Prod
{
    int CATID;
    Dictionary<string, string> prods = new Dictionary<string, string>();
}

public class Prods
{
   public List<Prod> Products {get;set;}
}

我应该如何更改上面的JSON以适应我下面的类,所以我可以使用JsonConvert反序列化它?

谢谢!

2 个答案:

答案 0 :(得分:1)

对我来说,你的JSON看起来不对,因为你并不总是拥有'一致'的名字/价值对。首先,我将像这样定义我的JSON

{
  "Prods": 
    [{
      "ID": "1001",
      "Items": 
        [{
          "Name": "Name1",
          "Prod": "XXX"
        },
        {
          "Name": "Name2",
          "Prod": "XXXX"
        }]        
    },
    {
      "ID": "2001", 
      "Items": 
        [{
          "Name": "Name3",
          "Prod": "XXX-000"
        },
        {
          "Name": "Name4",
          "Prod": "XXXX-1111"
        }]        
    }]
}

然后我会有以下类来处理数据

public class Item {
  public string Name { get; set;}
  public string Prod { get; set;}
}

public class Product {
  public string ID { get; set;}
  public List<Item> Items { get; set; }
}

public class Products {
  public List<Product> Prods { get; set; }
}

然后我会使用json.net之类的东西来处理序列化

答案 1 :(得分:0)

在 Visual Studio 2019 中,您可以创建一个新的类文件,删除类存根并使用 Edit->Paste Special->Paste JSON as Classes。这会很快生成表示 JSON 所需的类。如果您不喜欢它的输出方式,您可以调整您的 JSON 字符串并重试。

如果您有一些属性没有出现在 JSON 对象的每个实例中,您可以定义 JsonExtensionData 来保存其他属性

    [JsonExtensionData]
    public Dictionary<string, object> additionalJSON { get; set; } =
        new Dictionary<string, object>();