【问题标题】:Using Json.net - partial custom serialization of a c# object使用 Json.net - c# 对象的部分自定义序列化
【发布时间】:2011-07-21 05:32:33
【问题描述】:

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

在序列化过程中,我希望将键值对添加到我的 json 对象中,就好像它们在根级属性的位置一样...

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

不是这样的:

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

我已经通过 JsonSerializerSettings 进行了挖掘,但似乎无法找到我可以跳入并覆盖的地方???

【问题讨论】:

标签: c# serialization json.net


【解决方案1】:

您可以通过创建自己的JsonConverter 然后将属性添加到您要序列化的类来做到这一点 [JsonConverter(typeof(MyConverter))]

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

【讨论】:

【解决方案2】:

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

[JsonExtensionData]
public Dictionary<string, object> Meta { get; set; }

How to serialize a Dictionary as part of its parent object using Json.Net

【讨论】:

    【解决方案3】:

    你可以使用the .Net DataContractJsonSerializer

    自定义序列化见:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-10
      • 2017-03-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多