让.NET xml序列化支持Nullable
.NET的序列化,关于契约类的生成我们都是通过xsd.exe,对于值类型的可空判断是通过声明同名+Specified的bool属性来判断,比如:
public class Person
{
public string Name
{
get;
set;
} public int Age
{
get;
set;
}
[XmlIgnore]
public bool AgeSpecified
{
get;
set;
}
}
这样,当想生成Age节点,除了给Age赋值外还需要设置AgeSpecified=true。而反序列化时,则可以通过判断AgeSpecified是否为true来知道Age属性是否有被赋值。嗯,虽然麻烦点,但能够解决问题,挺不错,而且这还是xsd给我们生成的,省事。但如果你希望Person类即要支持xml序列化也支持json序列化呢?你该如何处理这个Specified字段?
有人该问了,为何不直接定义Age为可空类型?您可以试试,序列化出来的xml如下:
<?xml version="1.0" encoding="utf-8"?>
<Person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Name>name</Name>
<Age xsi:nil="true" />
</Person>
Age属性我是没有赋值的,但却生成了Age xsi。。。这样一个奇葩节点。
今天网上闲逛,偶然发现竟然可以这样:
public class Person
{
public string Name
{
get;
set;
} public int? Age
{
get;
set;
} public bool ShouldSerializeAge()
{
return Age != null;
}
}
竟然有ShouldSerialize特性,如果能够集成进xsd就好了,不然为了支持nullable,所有值类型都这么搞一次也挺累的。
https://msdn.microsoft.com/en-us/library/53b8022e(v=vs.110).aspx
让.NET xml序列化支持Nullable的更多相关文章
- 支持 XML 序列化的 Dictionary
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.X ...
- Dictionary(支持 XML 序列化),注意C#中原生的Dictionary类是无法进行Xml序列化的
/// <summary> /// Dictionary(支持 XML 序列化) /// </summary> /// <typeparam name="TKe ...
- Image(支持 XML 序列化),注意C#中原生的Image类是无法进行Xml序列化的
/// <summary> /// Image(支持 XML 序列化) /// </summary> [XmlRoot("XmlImage")] publi ...
- XML序列化的时候如何支持Namespace
我曾经不止一次(当然不仅仅是我意识到这个问题)说到过,XML标准中的Namespace的设计其实是一个较为失败的设计,它有它的优点,但缺点更多. http://zzk.cnblogs.com/s?w= ...
- WPF XML序列化保存数据 支持Datagrid 显示/编辑/添加/删除数据
XML序列化保存数据 using System; using System.Collections.Generic; using System.Linq; using System.Text; usi ...
- .NET中XML序列化的总结
[题外话] 以前虽然常用.NET中的序列化,但是常用的BinaryFormatter,也就是二进制文件的序列化,却鲜用XML的序列化.对于XML序列化,.NET中同样提供了一个非常方便的工具XmlSe ...
- 【转】Xml序列化
XML序列化是将对象的公共属性和字段转换为XML格式,以便存储或传输的过程.反序列化则是从XML输出中重新创建原始状态的对象.XML序列化中最主要的类是XmlSerializer类.它的最重要的方法是 ...
- .net学习笔记---xml序列化
XML序列化是将对象的公共属性和字段转换为XML格式,以便存储或传输的过程.反序列化则是从XML输出中重新创建原始状态的对象.XML序列化中最主要的类是XmlSerializer类.它的最重要的方法是 ...
- 【ASP.NET Web API教程】6.2 ASP.NET Web API中的JSON和XML序列化
谨以此文感谢关注此系列文章的园友!前段时间本以为此系列文章已没多少人关注,而不打算继续下去了.因为文章贴出来之后,看的人似乎不多,也很少有人对这些文章发表评论,而且几乎无人给予“推荐”.但前几天有人询 ...
随机推荐
- Android开发工具全面转向Android Studio(3)——AS project/module的目录结构(与Eclipse对比)
如果AS完全还没摸懂的,建议先看下Android开发工具全面转向Android Studio(2)——AS project/module的CRUD. 注:以下以Windows平台为标准,AS以目前最新 ...
- win8 vs2010 openni2 配置
打开一个新项目或者已存在的项目用以使用 OpenNI 在Visual Studio 菜单中, 打开项目菜单,选择项目属性. 在C/C++ 选项卡中, 在"常规" 下, 选择 &q ...
- python的正负无穷float("inf")的用法
今天,在看书的时候看到这么一个例子: 这是用来求解 从某个数字列表中找出俩个彼此最接近但是不相等的数(俩者之间的绝对差是最小的): >>> from random import ra ...
- Docker-2:network containers
docker run -d -P --name web training/webapp python app.py # -name means give the to-be-run container ...
- 解决jquery1.9不支持browser对象的问题||TypeError: $.browser is undefined
在插件的源代码里插入如下代码: (function(jQuery){ if(jQuery.browser) return; jQuery.browser = {}; jQuery.browser.mo ...
- java设计模式之-----桥接模式
一.概念定义 将抽象部分和实现部分分离,使他们都可以独立的变化.(这句话有点抽象啊..) 在软件系统中,某种类型由于自身逻辑,具有多个维度的变化,如何利用面向对象的技术来使得该类型沿着多方向变化,而又 ...
- npm下载速度太慢
因为墙的原因导致下载速度过慢,解决方式就是使用国内镜像 使用淘宝的镜像 npm config set registry="http://registry.npm.taobao.org/&qu ...
- 42. Trapping Rain Water
Given n non-negative integers representing an elevation map where the width of each bar is 1, comput ...
- express教程
原文地址 http://javascript.ruanyifeng.com/nodejs/express.html JavaScript 标准参考教程(alpha) 草稿二:Node.js Expre ...
- Global文件编译发布,代码不执行的问题与解决
问题:在Application_BeginRequest添加防止跨站点注入的过滤代码,VS2005编译成DLL发布后发现代码不会被执行: 环境:windows server 2008 r2 x64位 ...