【问题标题】:How can I Convert Below JSON to C# POCO Object如何将 JSON 以下转换为 C# POCO 对象
【发布时间】:2020-11-02 07:48:50
【问题描述】:
[
  { "_id" : "BrownHair", "Count" : 1 },
  {"_id" : "BlackHair" , "Count" : 5},
  {"_id" : "WhiteHair" , "Count" : 15}
]

我想将上面的 json 转换为 C# POCO 对象,如下所示

 public class HairColors
    {
        public int BrownHair { get; set; }
        public int BlackHair { get; set; }
        public int WhiteHair { get; set; }       
    }

请注意,我无法更改 POCO 和 JSON 的结构。

【问题讨论】:

  • 字典对你有用吗?
  • this 应该能帮到你
  • 你控制哪些部分?你能改变 Json 的结构吗?你能改变 POCO 的结构吗?两者都必须看起来像他们现在的样子吗?询问是因为您可以通过以下三种方式之一解决此问题:1. 更改 JSON,2. 更改 POCO,3. 提出一些“翻译”稍微不兼容的结构的解析代码。请注意,在后一种情况下,您可能还需要自定义序列化代码。
  • POCO和Json都不能改。
  • 这是答案的重要部分。我已将其添加到您的问题中。

标签: c# json deserialization json-deserialization poco


【解决方案1】:

您可以使用 JObject https://dotnetfiddle.net/ydvZ3l 进行一些自定义解析

        string json = "[\r\n  { \"_id\" : \"BrownHair\", \"Count\" : 1 },\r\n  {\"_id\" : \"BlackHair\" , \"Count\" : 5},\r\n  {\"_id\" : \"WhiteHair\" , \"Count\" : 15}\r\n]";

        var jobjects = JArray.Parse(json);
        foreach(var item in jobjects) {
            // Map them here
            Console.WriteLine(item["_id"]);
            Console.WriteLine(item["Count"]);
        }
// Output
//BrownHair
//1
//BlackHair
//5
//WhiteHair
15

【讨论】:

  • ... 然后您将_ids 与您的 POCO 的属性相匹配...不漂亮,但应该可以。 @OP
  • 确实!一点都不漂亮,如果我可以改变课程,我更愿意采用像 Salah 描述的解决方案。但我不会为了反序列化和映射到对象而引入两个新类。
【解决方案2】:

我会使用这样的东西:

public class MyArray    {
    public string _id { get; set; } 
    public int Count { get; set; } 
}

public class Root    {
    public List<MyArray> MyArray { get; set; } 
}

用法:

// Root myDeserializedClass = JsonConvert.DeserializeObject<Root>(myJsonResponse); 

在这种情况下,https://json2csharp.com/ 将是你最好的朋友。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-01
    • 2022-01-24
    • 2018-02-27
    • 2016-04-24
    • 1970-01-01
    • 2019-12-17
    相关资源
    最近更新 更多