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

实施PropertyChangedBase时caliburn.micro序列化问题

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

实施PropertyChangedBase时caliburn.micro序列化问题

您需要将

[DataContract]
属性添加到
Person
类中,并将
[DataMember]
属性添加到要序列化的每个属性和字段中:

[DataContract]public class Person : PropertyChangedbase{    [DataMember]    public int Id { get; set; }    private string _firstName;    [DataMember]    public string FirstName { get; set; }}

您需要这样做,因为caliburn.micro基类

PropertyChangedbase
具有以下
[DataContract]
属性:

namespace Caliburn.Micro {    [DataContract]    public class PropertyChangedbase : INotifyPropertyChangedEx    {    }}

但是为什么这是必要的呢?从理论上讲,

DataContractAttribute
适用于基类的存在
不应
影响派生
Person
类,因为
DataContractAttribute
sets
AttributeUsageAttribute.Inherited= false


[AttributeUsageAttribute(AttributeTargets.Class|AttributeTargets.Struct|AttributeTargets.Enum, Inherited = false, AllowMultiple = false)]public sealed class DataContractAttribute : Attribute

但是,

HttpClientExtensions.PostAsJsonAsync
使用的默认实例
JsonMediaTypeFormatter
,默认情况下使用Json.NET库执行序列化。
而Json.NET不尊重
Inherited =false
的属性
DataContractAttribute
,如解释在这里

[Json.NET]在基类上检测到DataContractAttribute并假定选择加入序列化。

(有关确认,请参阅有关DataContract#872的继承行为的问题,该问题确认Json.NET的这种行为仍然是预期的。)

因此,您毕竟需要添加这些属性。

另外,如果您不想在所有派生类上都应用数据协定属性,则可以切换到

DataContractJsonSerializer
以下说明:ASP.NET Web
API中的JSON和XML序列化:

如果愿意,可以将 JsonMediaTypeFormatter 类配置为使用 DataContractJsonSerializer
而不是Json.NET。为此,请将 UseDataContractJsonSerializer 属性设置为 true

var json = GlobalConfiguration.Configuration.Formatters.JsonFormatter;json.UseDataContractJsonSerializer = true;


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

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

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