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中文網其他相關文章!