开发者社区> jiankunking> 正文

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

简介: 背景今天在使用:C# Json 序列化与反序列化 反序列化的时候出现了下面的错误信息。 System.Runtime.Serialization.SerializationException: 数据协定类型“TestEntity”无法反序列化,因为未找到必需的数据成员“multipleChoice, runTimeDisplayColumns”。 在 System.ComponentMo
+关注继续查看
背景今天在使用: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]标识。



版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
【Python】【MySQL】Python将JSON数据以文本形式存放到MySQL的Text类型字段中
【Python】【MySQL】Python将JSON数据以文本形式存放到MySQL的Text类型字段中
13 0
Vue2.x-01点击按钮弹出子Vue组件,遍历JSON展示数据
Vue2.x-01点击按钮弹出子Vue组件,遍历JSON展示数据
16 0
借助云开发实现小程序列表页(包含json数据的请求和解析)
借助云开发实现小程序列表页(包含json数据的请求和解析)
17 0
零基础学小程序003----请求服务器数据,请求后台json数据
零基础学小程序003----请求服务器数据,请求后台json数据
16 0
SLS数据加工对Json数据解析与更新
本文档介绍对于包含Json格式字段的日志如何进行解析。 ## 场景一:Json对象展开与提取 日志中包含Json对象,通过e_json进行字段展开与对象提取 **示例1: Json一层展开** * 原始日志 ``` data: {"k1": "v1", "k2": {"k3": "v3", "k4": "v4"}} ``` * 加工规则 ```python e_json("data", de
13 0
Ajax传递json数据
Ajax传递json数据
15 0
stream流式JSON数据的特点及Java示例
流式JSON数据是指将JSON数据分成小块进行传输或处理的方式。与传统的JSON数据不同,流式JSON不需要将所有数据一次性读取到内存中进行处理,而是可以在数据流中逐个读取并处理。这种方式可以有效地避免内存溢出和性能问题,同时也可以使数据传输更加高效和可靠。流式JSON数据适用于许多场景,包括大数据处理、网络传输、实时数据处理和日志处理。在这些场景中,流式JSON可以显著提高数据处理和传输的效率和可靠性。同时,流式JSON还可以帮助开发人员更好地管理和处理JSON数据,并使得处理大量JSON数据变得更加容易和高效。
27 0
如何使用Request方法发送Post请求、JSON文件介绍、Python中的JSON数据以及获取到的JSON数据的解析。
如何使用Request方法发送Post请求、JSON文件介绍、Python中的JSON数据以及获取到的JSON数据的解析。
42 0
linux下提取日志文件中的某一行JSON数据中的指定Key
linux下提取日志文件中的某一行JSON数据中的指定Key
22 0
JavaScript 递归遍历json串获取相关数据
JavaScript 递归遍历json串获取相关数据
22 0
+关注
jiankunking
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载