특정 구성 요소 작업을 용이하게 하려면 List
Json.Net은 기본적으로 IEnumerable을 구현하는 클래스를 배열로 처리합니다. [JsonObject] 특성으로 클래스를 장식하면 이 동작을 재정의할 수 있지만 개체 속성만 직렬화하고 목록은 직렬화되지 않은 상태로 둡니다. 이는 공용 속성을 통해서가 아니라 GetEnumerator() 메서드를 통해 목록에 액세스할 수 있기 때문입니다.
두 가지를 모두 포함하려면 @에서 제안한 대로 파생 클래스의 공용 속성을 목록에 액세스할 수 있도록 만들 수 있습니다. Konrad 또는 사용자 정의 JsonConverter를 생성하여 객체 전체를 직렬화합니다. 다음은 예입니다.
PagedResult 가정
class PagedResult<T> : List<T> { public int PageSize { get; set; } public int PageIndex { get; set; } public int TotalItems { get; set; } public int TotalPages { get; set; } }
사용자 정의 변환기를 만드는 방법은 다음과 같습니다.
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("PageSize", result.PageSize); jo.Add("PageIndex", result.PageIndex); jo.Add("TotalItems", result.TotalItems); jo.Add("TotalPages", result.TotalPages); 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>(); result.PageSize = (int)jo["PageSize"]; result.PageIndex = (int)jo["PageIndex"]; result.TotalItems = (int)jo["TotalItems"]; result.TotalPages = (int)jo["TotalPages"]; result.AddRange(jo["Items"].ToObject<T[]>(serializer)); return result; } }
(이 접근 방식에서는 [JsonObject] 및 [JsonProperty]가 필요하지 않습니다. 직렬화할 항목은 변환기 클래스에 인코딩됩니다.)
아래는 변환기:
class Program { static void Main(string[] args) { PagedResult<string> result = new PagedResult<string> { "foo", "bar", "baz" }; result.PageIndex = 0; result.PageSize = 10; result.TotalItems = 3; result.TotalPages = 1; JsonSerializerSettings settings = new JsonSerializerSettings(); settings.Converters.Add(new PagedResultConverter<string>()); settings.Formatting = Formatting.Indented; string json = JsonConvert.SerializeObject(result, settings); Console.WriteLine(json); } }
출력:
{ "PageSize": 10, "PageIndex": 0, "TotalItems": 3, "TotalPages": 1, "Items": [ "foo", "bar", "baz" ] }
위 내용은 Json.NET을 사용하여 추가 멤버가 있는 목록 파생 클래스를 직렬화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!