Maison  >  Article  >  développement back-end  >  C# Json反序列化 数据协定类型 无法反序列化 因为未找到必需的数据成员

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

黄舟
黄舟original
2017-02-15 11:37:221429parcourir

背景今天在使用: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]标识。


以上就是以上就是的内容,更多相关内容请关注PHP中文网(www.php.cn)!的内容,更多相关内容请关注PHP中文网(www.php.cn)!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn