C# Json反序列化 数据协定类型 无法反序列化 由于未找到必需的数据成员

Posted yfceshi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# Json反序列化 数据协定类型 无法反序列化 由于未找到必需的数据成员相关的知识,希望对你有一定的参考价值。

背景今天在使用: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反序列化 数据协定类型 无法反序列化 由于未找到必需的数据成员的主要内容,如果未能解决你的问题,请参考以下文章

反序列化 json,其中属性与内置数据类型同名,在 C# 中

无法将 JSON 字符串反序列化为 C# 对象

c# 多个json字符串反序列化

C# 无法反序列化这个 json

C# dynamic类型序列化和反序列化之Newtonsoft.Json,动态解析远端返回的jSON数据

无法反序列化 JSON 响应