Json.Net: 목록에서 파생된 클래스의 멤버 직렬화
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!