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

JSON对类继承列表上的属性进行序列化

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

JSON对类继承列表上的属性进行序列化

您的基本困难是JSON有两种类型的容器:对象和数组。从标准:

  • 数组是值的有序集合。数组以

    [
    (左括号)开始,以(右括号)结束
    ]
    。值之间用
    ,
    (逗号)分隔。

  • 对象是名称/值对的无序集合。对象以

    {
    (左大括号)开始,以(右大括号)结束
    }

要强制对集合的属性进行序列化,请用标记

[JsonObject]

[JsonObject]public class TestResultListModel : List<TestResultModel>{    public int TotalTestCases { get { return base.Count; } }    public int TotalSuccessful { get { return base.FindAll(t => t.Successful).Count; } }}

当然,如果执行此操作, 则不会对项目进行序列化
,因为JSON容器可以具有属性或项目,但不能同时具有两者。如果两者都需要,则需要添加一个合成数组属性来保存项目-如果需要,可以将其私有。

[JsonObject]
还会导致
Capacity
您可能不希望的基类属性(例如,要序列化)。要取消基类属性,请使用
MemberSerialization.OptIn
。因此,您的最后一堂课应该看起来像:

[JsonObject(MemberSerialization = MemberSerialization.OptIn)]public class TestResultListModel : List<TestResultModel>{    [JsonProperty]    public int TotalTestCases { get { return base.Count; } }    [JsonProperty]    // Using Enumerable.Count() is more memory efficient than List.FindAll()    public int TotalSuccessful { get { return this.Count(t => t.Successful); } }    [JsonProperty]    TestResultModel[] Items    {        get        { return this.ToArray();        }        set        { if (value != null)     this.AddRange(value);        }    }}

这提供了类似于以下内容的JSON:

{  "TotalTestCases": 4,  "TotalSuccessful": 2,  "Items": [    {      "Successful": false,      "ErrorMessage": "STRING"    },    {      "Successful": true,      "ErrorMessage": "STRING"    },    {      "Successful": false,      "ErrorMessage": "STRING"    },    {      "Successful": true,      "ErrorMessage": "STRING"    }  ]}

由于这些属性可以在客户端轻松地重建,因此可能比其价值还多。



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

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

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