我正在使用Newtonsoft的JSON.NET库来序列化一些对象。特别是,我想将NetTopologySuite Point
类(或GeoAPI IPoint
接口)存储为我的对象的属性。
我只想在生成的JSON中存储latitude
和longitude
属性。相比之下,IPoint有X
,Y
,Z
和其他几个属性。
我可以以某种方式注入我自己的逻辑,以便如何将此特定类型序列化/反序列化为JSON?
谢谢!
答案 0 :(得分:7)
对于这种操作,我总是看看TweetSharp以及它如何处理它。
例如,TweetSharp使用TwitterGeoConverter.cs将TwitterGeoLocation.GeoCoordinates类型序列化/反序列化为JSON: https://github.com/danielcrenna/tweetsharp/blob/master/src/net40/TweetSharp.Next/Serialization/Converters/TwitterGeoConverter.cs
此转换器的关键方法是:
转换器本身使用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()
}
})
或者,您也可以使用属性注册转换器 - 请参阅http://cgeers.com/2011/09/25/writing-a-custom-json-net-datetime-converter/
或者......如果案例非常简单并且您拥有源代码 - 那么如果您只想在序列化期间忽略某些属性,那么您可以使用[JsonIgnore]
属性来获取所需的属性跳过。