背景今天在使用: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反序列化 数据协定类型 无法反序列化 由于未找到必需的数据成员的更多相关文章

  1. SpringMVC Ueditor1.4.3 未找到上传数据

    ueditor自事的fileupload组件与spring的有冲突.将那个类BinaryUploader 重写就可以了             return storageState;         ...

  2. 对 JSON 数据进行序列化和反序列化

    如何:对 JSON 数据进行序列化和反序列化 2017/03/30 作者 JSON(JavaScript 对象符号)是一种高效的数据编码格式,可用于在客户端浏览器和支持 AJAX 的 Web 服务之间 ...

  3. WCF初探-16:WCF数据协定之基础知识

    数据协定概念 “数据协定”是在服务与客户端之间达成的正式协议,用于以抽象方式描述要交换的数据. 也就是说,为了进行通信,客户端和服务不必共享相同的类型,而只需共享相同的数据协定. 数据协定为每一个做数 ...

  4. WCF初探-18:WCF数据协定之KnownType

    KnownTypeAttribute 类概述 在数据到达接收终结点时,WCF 运行库尝试将数据反序列化为公共语言运行库 (CLR) 类型的实例.通过首先检查传入消息选择为反序列化而实例化的类型,以确定 ...

  5. WCF学习心得------(六)数据协定

    --前言 最近各种事忙的把之前的WCF学习给耽误了一些,今天抽时间把之前的学习内容给总结了一下,因为知识点比较细碎没有做太多的练习示例,只是对其中关键的知识点做了总结,希望可以对大家有所帮助. 第六章 ...

  6. WCF基础之数据协定

    数据协定最重要的当然就是DataContract和DataMember.这两个特性能应用到类.结构和枚举.这个两个特性跟服务契约的特点是一样的,只有被DataContract标记的类和类中被标记Dat ...

  7. WCF初探-17:WCF数据协定之等效性

    数据协定等效性特点概述 对于客户端要将某种类型的数据成功发送到服务,或者服务要将数据成功发送到客户端的情况,接收端上并不一定必须存在此发送数据类型. 唯一的要求是两种类型的数据协定应该等效. 要使数据 ...

  8. 我们一起学习WCF 第五篇数据协定和消息协定

    A:数据协定(“数据协定”是在服务与客户端之间达成的正式协议,用于以抽象方式描述要交换的数据. 也就是说,为了进行通信,客户端和服务不必共享相同的类型,而只需共享相同的数据协定. 数据协定为每个参数或 ...

  9. 采购申请 POCIRM-001:ORA-01403: 无论数据未找到

    今天就让同事帮忙看问题.当请求生成采购订单,在销售模块错误提交销售订单 查看请求日志 +-------------------------------------------------------- ...

随机推荐

  1. SFM作业

    代码:https://github.com/jianxiongxiao/SFMedu PPT:http://3dvision.princeton.edu/courses/SFMedu/slides.p ...

  2. Springboot 配置文件与对象之间进行映射之@ConfigurationProperties

    一.将配置文件与实体类绑定1.1.将yaml配置文件的属性映射到Javabean中1.1.1.yaml配置文件注意:键值对的语法,键:之后必须要有空格 1.1.2.Javabean 定义注意:java ...

  3. spring-3-AOP

    自定义注解类 1.定义注解类 package anno; import java.lang.annotation.ElementType; import java.lang.annotation.Re ...

  4. EBS ORACLE采购对账单自动产生发票

    只要传入个对账单号,然后跑数据抛到接口表,运行接口请求,就可以自动生成发票 create or replace package body pkg_ap_check_by_po is --创建ap发票 ...

  5. python+Eclipse+pydev环境搭建1

    编辑器: Eclipse + pydev插件 1. Eclipse是写JAVA的IDE, 这样就可以通用了,学习代价小.  学会了Eclipse, 以后写Python或者JAVA 都可以. 2. Ec ...

  6. [LUOGU] P2920 [USACO08NOV]时间管理Time Management

    见7.3测试 #include<iostream> #include<algorithm> #include<cstdio> using namespace std ...

  7. 利用springboot创建多模块项目

    本文旨在用最通俗的语言讲述最枯燥的基本知识 最近要对一个不大不小的项目进行重构,用spring觉得太过于繁琐,用cloud又有觉得过于庞大,维护的人手不够:权衡之下,最终选了springboot作为架 ...

  8. c++_奖券数目

    奖券数目 有些人很迷信数字,比如带“4”的数字,认为和“死”谐音,就觉得不吉利.虽然这些说法纯属无稽之谈,但有时还要迎合大众的需求.某抽奖活动的奖券号码是5位数(10000-99999),要求其中不要 ...

  9. c++_凑算式(最新方法)

    凑算式 B DEFA + --- + ------- = 10 C GHI (如果显示有问题,可以参见[图1.jpg]) 这个算式中A~I代表1~9的数字,不同的字母代表不同的数字. 比如:6+8/3 ...

  10. POJ 3122 pie (二分法)

    Description My birthday is coming up and traditionally I'm serving pie. Not just one pie, no, I have ...