概述
背景今天在使用:C# Json 序列化与反序列化
具体原因是:我在反序列化的实体类中新加了两个属性:
反序列化的时候出现了下面的错误信息。
System.Runtime.Serialization.SerializationException: 数据协定类型“TestEntity”无法反序列化,因为未找到必需的数据成员“multipleChoice, runTimeDisplayColumns”。
在 System.ComponentModel.ReflectPropertyDescriptor.SetValue(Object component, Object value)
具体原因是:我在反序列化的实体类中新加了两个属性:
private bool multipleChoice;
/// <summary>
/// 帮助引擎是否允许多选
/// </summary>
[XmlIgnore]
[Browsable(false)]
public bool MultipleChoice
{
get
{
return multipleChoice;
}
set
{
multipleChoice = value;
}
}
private string runTimeDisplayColumns;
/// <summary>
/// 帮助引擎运行时显示的列
/// </summary>
[XmlIgnore]
[Browsable(false)]
public string RunTimeDisplayColumns
{
get
{
return runTimeDisplayColumns;
}
set
{
runTimeDisplayColumns = value;
}
}
在使用之前保存的Json串反序列化的时候,新增的两个两个属性,没有对应的值,所以报出了上面的错误。
解决方法:
[DataContract]
public class TestEntity
{
private bool multipleChoice;
/// <summary>
/// 帮助引擎是否允许多选
/// </summary>
[XmlIgnore]
[Browsable(false)]
[DataMember(IsRequired = false)]
public bool MultipleChoice
{
get
{
return multipleChoice;
}
set
{
multipleChoice = value;
}
}
private string runTimeDisplayColumns;
/// <summary>
/// 帮助引擎运行时显示的列
/// </summary>
[XmlIgnore]
[Browsable(false)]
[DataMember(IsRequired = false)]
public string RunTimeDisplayColumns
{
get
{
return runTimeDisplayColumns;
}
set
{
runTimeDisplayColumns = value;
}
}
}
通过DataMember(IsRequired = false)属性表面此属性,不是必须的。这样的话,保证了在反序列化的时候,即使JSON串内缺少该属性的定义能正常反序列化。
小注:
在属性上添加DataMember(IsRequired = false)后,对应的类上必须添加 [DataContract]标识。
最后
以上就是从容酸奶为你收集整理的C# Json反序列化 数据协定类型 无法反序列化 因为未找到必需的数据成员的全部内容,希望文章能够帮你解决C# Json反序列化 数据协定类型 无法反序列化 因为未找到必需的数据成员所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复