【问题标题】:Deserialing an object with unknown properties反序列化具有未知属性的对象
【发布时间】:2014-07-28 11:46:27
【问题描述】:

我有以下 JSON 字符串:

    {
    "id": "0",
    "version": "1.1",
    "result": {
        "status": "{\"1\": \"CONTINUOUS\", \"3\": \"NOT_CONFIGURED\", \"2\": \"NOT_CONFIGURED\", \"4\": \"EVENTO\"}"
    }
}

我想将此字符串反序列化为 c# 类。首先,我使用了 json2csharp.com,我得到了这些 c# 类来反序列化字符串:

public class Result {
    public string status { get; set; }
}

public class RootObject {
    public string id { get; set; }
    public string version { get; set; }
    public Result result { get; set; }
}

此解决方案对我无效,因为 status 不是字符串,它是 Dictionary 对象。这本字典的键和值不固定,可能不同。

我的解决方法:

我在 Result 类中添加了一个方法来获取该字典,但我意识到这种解决方法不是很“漂亮”,我相信有人可以为我提供更好的解决方案。 类与方法:

public class Result {
     public string status { get; set; }
     public Dictionary < string, string > GetValues() {
         return JsonConvert.DeserializeObject < Dictionary < string, string >> (status);
     }
 }

提前致谢

【问题讨论】:

  • 这看起来不像是有效的 JSON——更像是嵌套的 JSON 或类似的东西。你不能像你已经承认的那样一次性反序列化它。您是否能够修复 JSON 字符串,从而无需在 C# 中解决它?

标签: json serialization dictionary


【解决方案1】:

这里的问题是:

如何从字符串中获取字典:

"status": "{\"1\": \"CONTINUOUS\", \"3\": \"NOT_CONFIGURED\", \"2\": \"NOT_CONFIGURED\", \"4\": \"EVENTO\"}"

您知道status 键“指向”字符串类型的值,并且该字符串被格式化为字典。您还知道字典是 { - key:values 对的序列 - }

唯一的问题是键和值的类型。如果您的键和值始终是相同的类型(比如示例中的整数和字符串),那么问题就解决了。

只需将status 字符串解析为字典即可。

【讨论】:

    【解决方案2】:

    我忘了说我在 Result 类中包含了 GetValues 方法,因为如果我将 status 属性设置为 Dictionary 不起作用。

    JsonSerializationException 将值“{“1”:“CONTINUOUS”、“3”:“NOT_CONFIGURED”、“2”:“NOT_CONFIGURED”、“4”:“NOT_CONFIGURED”}”转换为类型“System.Collections.Generic.Dictionary@987654321”时出错@2[System.String,System.String]."} System.Exception {System.ArgumentException}

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-15
      • 1970-01-01
      • 2016-06-11
      • 2019-11-19
      • 2012-12-24
      • 1970-01-01
      相关资源
      最近更新 更多