我正在使用 Newtonsoft 的 JSON.NET 库来序列化一些对象。特别是,我想将 NetTopologySuitePoint
类(或 GeoAPIIPoint
接口)存储为我的对象的属性。
我只想在生成的 JSON 中存储一个latitude
andlongitude
属性。相比之下,IPoint 具有X
、Y
、Z
和其他几个属性。
我可以以某种方式注入我自己的逻辑来将这种特定类型序列化/反序列化到/从 JSON 吗?
谢谢!
我正在使用 Newtonsoft 的 JSON.NET 库来序列化一些对象。特别是,我想将 NetTopologySuitePoint
类(或 GeoAPIIPoint
接口)存储为我的对象的属性。
我只想在生成的 JSON 中存储一个latitude
andlongitude
属性。相比之下,IPoint 具有X
、Y
、Z
和其他几个属性。
我可以以某种方式注入我自己的逻辑来将这种特定类型序列化/反序列化到/从 JSON 吗?
谢谢!
对于这种操作,我总是查看 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()
}
})
或者,您也可以使用属性注册转换器 - 请参阅https://github.com/geersch/JsonNetDateTimeConverter
或者......如果情况非常简单并且您拥有源代码 - 那么如果您只是想在序列化过程中忽略某些属性,那么有一个[JsonIgnore]
属性可用于您想要跳过的属性。