栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

类的自定义Json序列化

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

类的自定义Json序列化

有两种不同的方法可以解决您的问题。

如果您要更频繁地更改类,则应该选择第一个,因为第一种方法可以避免忘记序列化新添加的属性。此外,如果您要添加其他要以相同方式序列化的类,则可以重用得多。

如果只有这两个类,并且很可能它们不会更改,则可以选择第二种方法来简化解决方案。

1.使用自定义转换器选择所有
int
属性

第一种方法是使用

JsonConverter
仅通过包含具有type的属性来序列化类或结构的自定义
int
。代码可能看起来像这样:

class IntPropertyConverter : JsonConverter{    public override bool CanConvert(Type objectType)    {        // this converter can be applied to any type        return true;    }    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)    {        // we currently support only writing of JSON        throw new NotImplementedException();    }    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)    {        if (value == null)        { serializer.Serialize(writer, null); return;        }        // find all properties with type 'int'        var properties = value.GetType().GetProperties().Where(p => p.PropertyType == typeof(int));        writer.WriteStartObject();        foreach (var property in properties)        { // write property name writer.WritePropertyName(property.Name); // let the serializer serialize the value itself // (so this converter will work with any other type, not just int) serializer.Serialize(writer, property.GetValue(value, null));        }        writer.WriteEndObject();    }}

然后,您必须使用来装饰类

JsonConverterAttribute

[JsonConverter(typeof(IntPropertyConverter))]public class UrlStats{    // ...}

免责声明: 此代码仅经过非常粗略的测试。


2.分别选择属性

第二种解决方案看起来更简单:您可以使用

JsonIgnoreAttribute
来装饰要为序列化排除的属性。另外,您可以通过显式包括要序列化的属性,从“黑名单”切换为“白名单”。这是一些示例代码:

黑名单:( 为了更好的概述,我对属性进行了重新排序)

[JsonObject(MemberSerialization.OptOut)] // this is default and can be omittedpublic class UrlStats{    [JsonIgnore] public string URL { get; set; }    [JsonIgnore] public List<Stats> TotalPages { get; set; }    [JsonIgnore] public List<Stats> TotalTitles { get; set; }    [JsonIgnore] public List<Stats> DuplicateTitles { get; set; }    [JsonIgnore] public List<Stats> OverlengthTitles { get; set; }    public int TotalPagesFound { get; set; }    public int TotalTitleTags { get; set; }    public int NoDuplicateTitleTags { get; set; }    public int NoOverlengthTitleTags { get; set; }}

白名单:( 也已重新排序)

[JsonObject(MemberSerialization.OptIn)] // this is important!public class UrlStats{    public string URL { get; set; }    public List<Stats> TotalPages { get; set; }    public List<Stats> TotalTitles { get; set; }    public List<Stats> DuplicateTitles { get; set; }    public List<Stats> OverlengthTitles { get; set; }    [JsonProperty] public int TotalPagesFound { get; set; }    [JsonProperty] public int TotalTitleTags { get; set; }    [JsonProperty] public int NoDuplicateTitleTags { get; set; }    [JsonProperty] public int NoOverlengthTitleTags { get; set; }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/616752.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号