Using Json.net - partial custom serialization of a c# object

倾然丶 夕夏残阳落幕 提交于 2019-12-17 20:17:52

问题


I ma using Newtonsofts' Json.Net to serialize some and array of objects to json. The objects have a common set of properties but also have Meta property which is a dictionary

During serialization I want the key value pairs to be added to my json object as if they where root level properties, like this...

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

Not like this:

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

I have dug through JsonSerializerSettings but cant seem to spot where I can jump in and override???


回答1:


You can do this by creating your own JsonConverter and then adding an attribute to the class you want to serialize [JsonConverter(typeof(MyConverter))]

Example here - http://www.lostechies.com/blogs/rhouston/archive/2008/02/25/a-custom-converter-for-json-net.aspx




回答2:


If your dictionary is a string to object dictionary could can simply use the [JsonExtensionData] attribute:

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

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




回答3:


You could use the .Net DataContractJsonSerializer.

For custom serialization, see:

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

One advantage of using IDataContractSurrogate (compared to simply adding properties to your class for serialization) is that you don't have to mix actual properties and serialization properties together in the same class.

Another advantage (compared to having to do custom serialization against a property bag, ala KeyValuePairConverter) is that you only have to add attributes to properties on your classes (the actual type and the surrogate type) and you can write all your conversion/custom serialization code directly against those types. This keeps your code higher level, and lets the framework deal with the exact transport mechanism.



来源:https://stackoverflow.com/questions/5404303/using-json-net-partial-custom-serialization-of-a-c-sharp-object

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!