【问题标题】:JSON converting into C# or classes [duplicate]JSON转换为C#或类[重复]
【发布时间】:2018-06-29 19:53:59
【问题描述】:

我有以下格式的 JSON(不是真实数据),我正在尝试将其转换为 C# 等效类。如果您注意到 type_1、type_2 这些可能是任意数字。这很难收集(有点匿名)。如果我从 JSON 中删除所有 type_1、type_2 ...,则很容易将其转换为类。由于它本质上是动态的,因此很难。

我已经尝试http://json2csharp.com/ 来获取课程。问题是,它将“类型”转换为成员,这是不正确的,它应该是动态集合或数组。

这个略有不同的问题

这个问题有 2 个额外的问题,第一个“type_1”元素是动态的,第二个是这些元素不在列表或数组中。

我无法控制这种 JSON 格式,这让人非常沮丧。

{
    "type_1": {
        "@type": "blob",
        "content_type": "image/jpeg",
        "digest": "sha1-rCY0Tk8qRqaLfiQXdxYeX9Y+WMI="
    },
    "type_2": {
        "@type": "blob",
        "content_type": "image/jpeg",
        "digest": "sha1-rCY0Tk8qRqaLfiQXdxYeX9Y+WMI="
    },
    "type_3": {
        "@type": "blob",
        "content_type": "image/jpeg",
        "digest": "sha1-rCY0Tk8qRqaLfiQXdxYeX9Y+WMI=",
    },
    "type_4": {
        "@type": "blob",
        "content_type": "image/jpeg",
        "digest": "sha1-rCY0Tk8qRqaLfiQXdxYeX9Y+WMI=",
    },
    "type_5": {
        "@type": "blob",
        "content_type": "image/jpeg",
        "digest": "sha1-rCY0Tk8qRqaLfiQXdxYeX9Y+WMI=",
    },

    "References": {
        "blob_1": {
            "content_type": "image/jpeg",
            "digest": "sha1-rCY0Tk8qRqaLfiQXdxYeX9Y+WMI=",
            "revpos": 1,
            "stub": true
        },

        "blob_2": {
            "content_type": "image/jpeg",
            "digest": "sha1-rCY0Tk8qRqaLfiQXdxYeX9Y+WMI=",
            "revpos": 1,
            "stub": true
        }
    },
    "someproperty1": "somevalue1",
    "someproperty2": "somevalue2",
    "someproperty3": "somevalue3",
    "someproperty4": "somevalue4",
    "someproperty5": "somevalue5"
}

我在想类似的事情

Filecollection 只不过是那个匿名集合;不走运;(

public partial class Doc
    {
        [JsonProperty("references")]
        public Dictionary<String, Attachments> Attachments { get; set; }

        public List<Dictionary<String, Details>> FileCollections { get; set; }

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

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

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

    }

【问题讨论】:

  • 您的 JSON 不包含列表,转换器没有提取该列表是正常的。
  • 这不是真的.. 这个问题有 2 个额外的问题首先“type_1”元素是动态的,不在列表中
  • type_1type_2 是否有共同的模式?如,名称是否始终相同(类型)并后跟下划线(_),然后是数字增量?
  • @Svek 不是真的 .. 在内部这些是文件名。可以是任何种类。
  • 嗯....你知道文件名吗?更具体地说,它们是否在某个地方的数组中可用?

标签: c# json


【解决方案1】:

根据您的 cmets(希望我理解)...

{
    "unknown_a" : {...},
    "unknown_b" : {...},
    "unknown_c" : {...},
    "unknown_d" : {...},
    "foo" : true,      // known property
    "bar" : {          // known property
        "x" : "xxx",   
        "y" : "yyy"
    }
}

我在想你想要Dictionary&lt;string, object&gt;

然后你可以做一些你自己的转换魔法 --- 例如(只是为了让概念在那里)

foreach (d in dictionary)
{
    switch (d.Key)
    {
        case "foo": ... // known property
            obj.Foo = (bool)d.Value;
            break;
        case "bar": ... // known property
            obj.Bar = (Bar)d.Value;
            break;
        default: ...    // according to your comments, these are known types
            try
            {
                obj.Files.Add((File)d.Value);
            }
            catch {...}
            break;
    }
}

【讨论】:

  • 我也想过这个。但是其他属性会发生什么?那里也有
  • 你可以把它分解成一个额外的步骤。翻阅字典并取出您已经知道的键,并进行相应的转换。 --- 我会尝试为您添加一些示例代码。给我一点时间来更新答案。
  • @abhishek -- 这样的事情怎么样?
  • 好的。让我试试这个,
  • @abhishek 这解决了你的问题吗?
猜你喜欢
  • 2021-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
  • 2017-08-07
  • 2017-08-12
相关资源
最近更新 更多