解析具有未知属性的对象

时间:2014-07-28 11:46:28

标签: json serialization dictionary

我有以下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);
     }
 }

提前致谢

2 个答案:

答案 0 :(得分:0)

这里的问题是:

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

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

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

唯一的问题仍然是键和值的类型。如果你的键和值总是相同的类型(比如说,示例中的整数和字符串),问题就解决了。

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

答案 1 :(得分:0)

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

JsonSerializationException 转换值时出错&#34; {&#34; 1&#34;:&#34;连续&#34;,&#34; 3&#34;:&#34; NOT_CONFIGURED&#34;,&#34; 2&# 34;:&#34; NOT_CONFIGURED&#34;,&#34; 4&#34;:&#34; NOT_CONFIGURED&#34;}&#34;键入&#39; System.Collections.Generic.Dictionary 2[System.String,System.String]'. Path 'result.status', line 1, position 157. + InnerException {"Could not cast or convert from System.String to System.Collections.Generic.Dictionary 2 [System.String,System.String]。&#34;} System.Exception {System.ArgumentException}