3

Newtonsoft の JSON.NET ライブラリを使用して、いくつかのオブジェクトをシリアル化しています。Point特に、NetTopologySuiteクラス (または GeoAPIIPointインターフェイス) をオブジェクトのプロパティとして保存したいと考えています。

結果の JSON にlatitudeandプロパティのみを格納したいと考えています。longitude対照的に、IPoint にはXYZ、およびその他のいくつかのプロパティがあります。

この特定の型を JSON との間でシリアル化/逆シリアル化する方法について、何らかの方法で独自のロジックを挿入できますか?

ありがとう!

4

1 に答える 1

7

この種の操作については、TweetSharp とそれがどのように処理されるかを常に確認しています。

たとえば、TweetSharp は TwitterGeoConverter.cs を使用して、TwitterGeoLocation.GeoCoordinates 型を JSON との間でシリアル化/逆シリアル化します 。 /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()
                                        }
                   })

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


または、属性を使用してコンバーターを登録することもできます - https://github.com/geersch/JsonNetDateTimeConverterを参照してください


または...ケースが非常に単純で、ソースコードを所有している場合-シリアル化中にいくつかのプロパティを単に無視したい場合は、[JsonIgnore]スキップするプロパティに使用できる属性があります。

于 2012-09-18T12:44:42.203 に答える