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]标识。



  • 相关阅读:
    WebGL——osg框架学习一
    webgl绘制粗线段
    ThreeJS实现波纹粒子效果
    WebGL——水波纹特效
    WebGL之shaderToy初使用
    有效提升职场竞争力
    Windows结构化异常处理浅析
    一起学习Boost标准库--Boost.StringAlgorithms库
    科学计算工具-Numpy初探
    进程动态拦截注入API HOOK
  • 原文地址:https://www.cnblogs.com/yfceshi/p/6882947.html
Copyright © 2011-2022 走看看