将复数 JSON 转换为 C# 模型

Converting Complex JSON to C# Model

我正在尝试解决我收到的一些复杂问题 JSON 以将其转换为 C# 模型,以便我可以分析和操作数据。我已经尝试通过使用 JSON 将 JSON 转换为 C#,但是当名称是动态的时它不能很好地工作。我想专注于数据。

Item1 和 SubItem1 等都是可变字符串,所以我不能硬编码模型来提取它们,文本只是其中的一个字符串。我遇到的问题是如何将 JSON 转换为可用格式以访问 Item1、SubItem1 和文本值来操作它们的数据。

我已经按照其他地方的建议查看了词典,但我没有运气。

我试过的型号

public class Data
{
        public string Status { get; set; }
        public ResultInfo ResultInfo { get; set; }
        public string Message { get; set; }
        public Dictionary<string, SubData> Data {get;set;}
}

public class SubData
{
   public Dictionary<string,List<string>> item {get;set;}
}

JSON

{
    "Status": "OK",
    "ResultInfo": {
        "Prev": "PageUPURL",
        "Next": "PageDownURL",
        "total_count": "37",
        "per_page": "3",
        "page": "1"
    },
    "Message": "Ok.",
    "Data": {
        "Item1": [
            {
                "SubItem1": [
                    "Text"
                ]
            }
        ],
        "Item2": [
            {
                "SubItem2": [
                    "Text",
                    "Text",
                    "Text"
                ]
            }
        ],
        "Item3": [
            {
                "SubItem3": [
                    "Text"
                ]
            },
            {
                "SubItem4": [
                    "Text"
                ]
            }
        ]
    }
}

如有任何建议、建议或帮助,我们将不胜感激。

更改下行

public Dictionary<string, SubData> Data {get;set;}

作为

public Dictionary<string, Dictionary<string, string[]>[]> Data { get; set; }

对于那些任务,我使用 https://app.quicktype.io .
因为当 属性 名称是数字时它可以很容易地重新连接字典你只需要稍微编辑你的 Json。
并将其传递到工具中。

{
    "Status": "OK",
    "ResultInfo": {
        "Prev": "PageUPURL",
        "Next": "PageDownURL",
        "total_count": "37",
        "per_page": "3",
        "page": "1"
    },
    "Message": "Ok.",
    "Data": {
        "1": [
            {
                "1": [
                    "Text"
                ]
            }
        ],
        "2": [
            {
                "1": [
                    "Text",
                    "Text",
                    "Text"
                ]
            }
        ],
        "3": [
            {
                "1": [
                    "Text"
                ]
            },
            {
                "2": [
                    "Text"
                ]
            }
        ]
    }
}

结果class是:

public partial class Root
{
    [JsonProperty("Status")]
    public string Status { get; set; }

    [JsonProperty("ResultInfo")]
    public ResultInfo ResultInfo { get; set; }

    [JsonProperty("Message")]
    public string Message { get; set; }

    [JsonProperty("Data")]
    public Dictionary<string, List<Dictionary<string, List<string>>>> Data { get; set; }
}

public partial class ResultInfo
{
    [JsonProperty("Prev")]
    public string Prev { get; set; }

    [JsonProperty("Next")]
    public string Next { get; set; }

    [JsonProperty("total_count")]
    [JsonConverter(typeof(ParseStringConverter))]
    public long TotalCount { get; set; }

    [JsonProperty("per_page")]
    [JsonConverter(typeof(ParseStringConverter))]
    public long PerPage { get; set; }

    [JsonProperty("page")]
    [JsonConverter(typeof(ParseStringConverter))]
    public long Page { get; set; }
}

在线演示https://dotnetfiddle.net/1j42kR


注意事项:该工具还包括一个从“字符串”到“长”的转换器,适用于 "per_page": "3",