首頁 > 後端開發 > C++ > 如何序列化從 Json.Net 中的列表派生的類,同時保留自訂屬性和列表項?

如何序列化從 Json.Net 中的列表派生的類,同時保留自訂屬性和列表項?

Linda Hamilton
發布: 2025-01-07 13:17:41
原創
908 人瀏覽過

How to Serialize a Class Derived from List in Json.Net while Preserving Both Custom Properties and List Items?

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板