首页 > 后端开发 > C++ > 如何序列化从 Json.Net 中的列表派生的类,同时保留自定义属性和列表项?

如何序列化从 Json.Net 中的列表派生的类,同时保留自定义属性和列表项?

Linda Hamilton
发布: 2025-01-07 13:17:41
原创
864 人浏览过

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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板