更改特定类型的JSON.NET序列化(不是我的)

Dav*_*fer 3 c# serialization json.net

我正在使用Newtonsoft的JSON.NET库来序列化一些对象.特别是,我想将NetTopologySuite Point类(或GeoAPI IPoint接口)存储为我的对象的属性.

我只想在生成的JSON中存储latitudelongitude属性.相比之下,IPOINT有X,Y,Z,和其他几个属性.

我可以以某种方式注入我自己的逻辑,如何序列化/反序列化这种特定类型到/从JSON?

谢谢!

Stu*_*art 7

对于这种操作,我总是看看TweetSharp以及它如何处理它.

例如,TweetSharp使用TwitterGeoConverter.cs到连载从JSON/deserialise的TwitterGeoLocation.GeoCoordinates类型/: https://github.com/danielcrenna/tweetsharp/blob/master/src/net40/TweetSharp.Next/Serialization/Converters /TwitterGeoConverter.cs

这个转换器的关键方法是:

  • CanConvert - 此转换器是否应在此成员上使用
  • WriteJson - 将对象处理为字符串输出
  • ReadJson - 处理字符串到对象解析

转换器本身使用JsonSerializerSettings在JSON.Net注册 - 例如:

new JsonSerializerSettings
                   {
                       MissingMemberHandling = MissingMemberHandling.Ignore,
                       NullValueHandling = NullValueHandling.Ignore,
                       DefaultValueHandling = DefaultValueHandling.Include,
                       ContractResolver = new JsonConventionResolver(),
                       Converters = new List<JsonConverter>
                                        {
                                            new TwitterDateTimeConverter(),
                                            new TwitterWonkyBooleanConverter(),
                                            new TwitterGeoConverter()
                                        }
                   })
Run Code Online (Sandbox Code Playgroud)

(来自https://github.com/danielcrenna/tweetsharp/blob/master/src/net40/TweetSharp.Next/Serialization/SerializerBase.cs)


或者,您也可以使用属性注册转换器 - 请参阅http://cgeers.com/2011/09/25/writing-a-custom-json-net-datetime-converter/


或者......如果案例非常简单并且您拥有源代码 - 那么如果您只是想在序列化期间忽略某些属性,那么[JsonIgnore]您可以跳过要跳过的属性的属性.