使用Json.net – ac#object的部分自定义序列化

我使用Newtonsofts的Json.Net将一些对象数组序列化为json。 对象具有一组共同的属性,但也具有Meta属性,这是一个字典

在序列化期间,我希望将键值对添加到我的json对象,就像它们在根级别属性中一样,就像这样……

{ id: 1, name:'jeff', food:'spinch', spoon: 'ýes' } 

不是这样的:

  { id: 1, name:'jeff', meta:{ food:'spinch', spoon: 'ýes' } } 

我已经挖了JsonSerializerSettings但似乎无法发现我可以跳进去并覆盖???

您可以通过创建自己的JsonConverter然后向要序列化的类添加属性来实现此目的[JsonConverter(typeof(MyConverter))]

这里的示例 – http://www.lostechies.com/blogs/rhouston/archive/2008/02/25/a-custom-converter-for-json-net.aspx

如果你的字典是一个stringobject字典可以简单地使用[JsonExtensionData]属性:

 [JsonExtensionData] public Dictionary Meta { get; set; } 

请参见如何使用Json.Net将字典序列化为其父对象的一部分 。

您可以使用.Net DataContractJsonSerializer 。

有关自定义序列化,请参阅:

http://msdn.microsoft.com/en-us/library/system.runtime.serialization.idatacontractsurrogate.aspx

使用IDataContractSurrogate一个优点(与简单地向类中添加属性以进行序列化)的一个优点是,您不必在同一个类中将实际属性和序列化属性混合在一起。

另一个优点(与必须对属性包进行自定义序列化相比,ala KeyValuePairConverter )是您只需要为类的属性添加属性(实际类型和代理类型),您可以编写所有转换/自定义序列化直接针对这些类型的代码。 这使您的代码保持更高级别,并让框架处理确切的传输机制。