zoukankan      html  css  js  c++  java
  • 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]标识。



  • 相关阅读:
    你能用多长时间停车?
    中国威胁论好像还挺严重的
    热爱生命
    lunix下shell脚本批量获取文件,批量修改文件内容
    sql数据操作的若干心得(二)向表中自动插入自增的ID
    Asp.net开发之旅动态产生控件
    Asp.net开发之旅GridView中嵌入DropDownList的一点心得
    Asp.net开发之旅开发环境
    Asp.net开发之旅简单的引用母版页
    Sql数据操作的若干心得
  • 原文地址:https://www.cnblogs.com/yfceshi/p/6882947.html
Copyright © 2011-2022 走看看