Json.Net: List から派生したクラスのメンバーをシリアル化する
Json.Net は、デフォルトで IEnumerable を実装するクラスを次のように扱います。配列。この動作をオーバーライドするには、派生クラスを [JsonObject] 属性と [JsonProperty] 属性でマークします。ただし、これはリストではなく、派生クラスのメンバーのみをシリアル化します。
派生クラスのメンバーとリストの両方をシリアル化するには、派生クラスにパブリック プロパティを指定してリストを公開します。
class PagedResult<T> : List<T> { public IEnumerable<T> Items { get { return this; } } }
または、カスタム JsonConverter を作成して全体をシリアル化します。
class PagedResultConverter<T> : JsonConverter { public override bool CanConvert(Type objectType) { return (objectType == typeof(PagedResult<T>)); } public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { PagedResult<T> result = (PagedResult<T>)value; JObject jo = new JObject(); jo.Add("Properties", JObject.FromObject(result, serializer)); jo.Add("Items", JArray.FromObject(result.ToArray(), serializer)); jo.WriteTo(writer); } public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { JObject jo = JObject.Load(reader); PagedResult<T> result = new PagedResult<T>(); jo["Properties"].ToObject<PagedResult<T>>(serializer); result.AddRange(jo["Items"].ToObject<T[]>(serializer)); return result; } }
コンバーターをJsonSerializerSettings:
JsonSerializerSettings settings = new JsonSerializerSettings(); settings.Converters.Add(new PagedResultConverter<T>());
以上がカスタムプロパティとリスト項目の両方を保持しながら、Json.Netのリストから派生したクラスをシリアル化する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。