【问题标题】:Custom serialization/deserialization of specific objects特定对象的自定义序列化/反序列化
【发布时间】:2011-09-21 14:45:03
【问题描述】:
我需要反序列化的JSON-objects 具有以下形式:
{
"typeName":
{
"field1": "content1",
"field2": "content2" ...
}
}
基本上这意味着,除了数组之外的每个对象都包含在一个包装对象中,其中字段名称是被包装对象的类型。需要类型名称来创建特定子类的实例。我无法更改任何内容,但需要使用此界面。我尝试编写一个自定义转换器,但我不知道如何区分类型信息和包装对象的普通字段名称。有没有可能以任何方式解决这个问题?
【问题讨论】:
标签:
.net
serialization
json.net
【解决方案1】:
您的问题不是很清楚,但我假设您的“typeNames”不固定。如果是这样,您可以使用Json.NET 反序列化成字典,即:
public void DeserializeSomeStuff()
{
const string json = @"{""typeName"":{""field1"": ""content1"",""field2"": ""content2""}}";
var obj = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, Dictionary<string, string>>>(json);
foreach (var kvp in obj)
{
Console.WriteLine("key={0}", kvp.Key);
foreach (var kv in kvp.Value)
{
Console.WriteLine(" key={0} value={1}", kv.Key, kv.Value);
}
}
// key=typeName
// key=field1 value=content1
// key=field2 value=content2
}