使用JSON.Net我想反序列化一个类似于这样的JSON对象:
"properties": {
"foo": 1,
"bar": "Fred",
"baz": [694481.61, 693638.0, 692624.65, 692354.54]
}
并以dictionary<string,string>
结尾,如下所示:
{ "foo", "1" },
{ "bar", "\"Fred\"" },
{ "baz", "[694481.61, 693638.0, 692624.65, 692354.54]" }
需要注意的要点是:
到目前为止我尝试了什么
JRaw
个对象。如果我事先知道关键名称,这将有效:我可以在类中声明匹配属性JRaw
- 例如public JRaw foo { get; set; }
。但是关键名称没有预定义,所以我不能。RawValueDictionaryConverter : JsonConverter
自定义转换器,用于获取流并将其直接反序列化为dictionary<string,string>
。我认为这很简单,但原始流的原始文本在ReadJson()
内不可用;流已经被标记化,ReadJson()
仅接收解释的标记和令牌类型。答案 0 :(得分:1)
你可以反序列化为Dictionary<string, JRaw>
,它可以让你到达中途。例如:
//Example class
public class Root
{
public Dictionary<string, JRaw> properties { get; set; }
}
var json = "<from the question>";
var result = JsonConvert.DeserializeObject<Root>(json);
foreach (var property in result.Properties)
{
var value = property.Value.ToString();
}
如果您仍希望将值作为字符串,则可以像这样转换:
var stringDictionary = result.Properties.ToDictionary(p => p.Key, p => p.ToString());