我使用Newtonsofts的Json.Net将一些对象数组序列化为json。 对象具有一组共同的属性,但也具有Meta属性,即字典
在序列化期间,我希望将键值对添加到我的json对象中,就像它们在根级别属性中一样,就像这样......
{
id: 1,
name:'jeff',
food:'spinch',
spoon: 'ýes'
}
不喜欢这样:
{
id: 1,
name:'jeff',
meta:{
food:'spinch',
spoon: 'ýes'
}
}
我已经挖过JsonSerializerSettings,但似乎无法发现我可以跳进去并覆盖???
答案 0 :(得分:4)
您可以通过创建自己的JsonConverter
然后向要序列化的类添加属性来执行此操作
[JsonConverter(typeof(MyConverter))]
此处示例 - http://www.lostechies.com/blogs/rhouston/archive/2008/02/25/a-custom-converter-for-json-net.aspx
答案 1 :(得分:2)
如果您的词典是string
到object
词典,则只需使用[JsonExtensionData]
属性:
[JsonExtensionData]
public Dictionary<string, object> Meta { get; set; }
请参阅How to serialize a Dictionary as part of its parent object using Json.Net。
答案 2 :(得分:0)
您可以使用the .Net DataContractJsonSerializer。
有关自定义序列化,请参阅:
http://msdn.microsoft.com/en-us/library/system.runtime.serialization.idatacontractsurrogate.aspx
使用IDataContractSurrogate
的一个优点(与简单地为类进行序列化添加属性相比)的一个优点是,您不必在同一个类中将实际属性和序列化属性混合在一起。
另一个优点(与必须对属性包进行自定义序列化相比,ala KeyValuePairConverter)是你只需要为类的属性添加属性(实际类型和代理类型),你可以直接针对这些类型编写所有转换/自定义序列化代码。这使您的代码保持更高级别,并让框架处理确切的传输机制。