json.netバックを使用するために必要なタイプ情報は必要ありません。
JSON.NETは、強力な.NET JSONシリアル化および砂漠化ライブラリです。ただし、シリアル化されたデータに情報の種類がない場合、カウンターシーケンシャル多型JSONは困難な場合があります。 質問:タイプ情報の欠如
多型により、複数のクラスがパブリックベースクラスから継承できるようになります。深部化が多型オブジェクトのJSONデータを表す場合、情報の種類がない場合、どのクラスをインスタンス化する必要があるかを判断することは困難です。
たとえば、次のJSONデータを考慮すると、ギャラリーの画像またはギャラリーアルバムクラスが示されています。 "is_album"属性は区別されます。ギャラリー画像の「is_album」はfalseに設定されており、ギャラリーアルバムはTrueに設定されています。
解決策:jsonconveter
この多型JSONの依存性については、オブジェクトインスタンスを処理するためにカスタムJSonConverrerを作成できます。コンバーターは「is_album」プロパティをチェックし、対応するクラスインスタンスを作成します。
<code class="language-json">{ "id": "OUHDm", "title": "My most recent drawing. Spent over 100 hours.", "is_album": false }</code>これは、GalleryItemConverter:
と呼ばれるサンプルコンバーターです
の例出力の例
<code class="language-csharp">public class GalleryItemConverter : JsonConverter { // 指定转换器可以转换GalleryItem及其派生类 public override bool CanConvert(Type objectType) => typeof(GalleryItem).IsAssignableFrom(objectType); public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { // 将JSON读取为JObject JObject jo = JObject.Load(reader); // 检查"is_album"属性以确定类类型 bool? isAlbum = (bool?)jo["is_album"]; GalleryItem item; if (isAlbum.GetValueOrDefault()) item = new GalleryAlbum(); else item = new GalleryImage(); // 从JSON数据填充项目属性 serializer.Populate(jo.CreateReader(), item); return item; } }</code>提供されたJSONデータとカスタムコンバーターを使用して、捨てられたGalleryItemオブジェクトを取得できます。
以上がjson.netを使用してタイプ情報なしで多型JSONを脱色するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。