.NET(C#):在数组成员上加入XmlElement特性
原文 www.cnblogs.com/mgen/archive/2011/12/04/2276131.html
当对如下类进行XML序列化时:
publicclassa
{
};
}
结果会是:
<axmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<arr>
</int>
</int>
</int>
</arr>
</a>
数组字段会成为单独的XML元素。
而如果在类型的数组成员上加入XmlElement特性,生成的XML不会有最外的字段名称XML元素,比如这样:
publicclassa
{
[XmlElement(Type =typeof(int))]
};
}
结果会生成这样的XML:
<axmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
</arr>
</arr>
</arr>
</a>
或许你在质疑这样的XML能不能被正确得反序列化?我开始也是这样想的,结果就是可以被成功反序列化,全部代码:
using System;
using System.Linq;
using System.Collections.Generic;
using System.Xml;
using System.Xml.Serialization;
using System.IO;
namespace Mgen
{
publicclassa
{
[XmlElement(Type =typeof(int))]
};
}
classProgram
{
staticvoid Main()
{
var xs =newXmlSerializer(typeof(a));
using (var textWriter =newStringWriter())
{
Console.WriteLine("序列化");
xs.Serialize(textWriter, newa());
Console.WriteLine(textWriter);
Console.WriteLine("反序列化");
var obj = (a)xs.Deserialize(newStringReader(textWriter.ToString()));
foreach (var i in obj.arr)
Console.WriteLine(i);
}
}
}
}
程序会输出:
序列化
<?xml version="1.0" encoding="utf-16"?>
<a xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<arr>1</arr>
<arr>2</arr>
<arr>3</arr>
</a>
反序列化
你可以添加多个XmlElement特性(如果数组会指向派生类的数组)。比如a的arr字段是一个object数组:
, "hehe", Guid.NewGuid() };
输出XML:
<axmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<arr>
</anyType>
<anyTypexsi:type="xsd:string">hehe</anyType>
<anyTypexmlns:q1="http://microsoft.com/wsdl/types/"
xsi:type="q1:guid">a4efc250-d935-4925-836e-d4b4b089e3fe</anyType>
</arr>
</a>
注意object对应的XML元素是<anyType>,然后xsi:type属性是具体的类型。
如果在字段arr上加入XmlElement特性:
[XmlElement(Type =typeof(int)), XmlElement(Type =typeof(Guid)), XmlElement(Type =typeof(string))]
, "hehe", Guid.NewGuid() };
输出XML:
<axmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
</int>
<string>hehe</string>
<guid>58359cd3-afe3-4650-b222-9b3ff5df186a</guid>
</a>
作者:Mgen
出处:www.cnblogs.com/mgen
.NET(C#):在数组成员上加入XmlElement特性的更多相关文章
- 第 14 章 结构和其他数据形式(伸缩型数组成员C99)
伸缩型数组成员C99 声明一个伸缩型数组成员的规则: 1.伸缩型数组成员必须是结构的最后一个成员: 2.结构中必须至少有一个成员: 3.伸缩数组的方括号是空的. 示例 struct flex { in ...
- c/c++柔性数组成员
柔性数组成员 定义和声明分离 #include <stdio.h> //只是告诉编译器,当编译到使用到这个函数的的代码时,虽然还没有找到函数定义的实体,但是也让它编译不出错误. exter ...
- 柔性数组成员 (flexible array member)-C99-ZZ
学习flexible array member是因为阅读Redis源码遇到的,sds.h中一开始就用到了. ============================================== ...
- .NET(C#):XmlArrayItem特性和XmlElement特性在序列化数组的差别
原文http://www.cnblogs.com/mgen/archive/2011/12/04/2276238.html 比如这样一个类,我们用XmlArrayItem特性标明数组内出现的元素类型: ...
- Java使用foreach语句对数组成员遍历输出
/** * 本程序使用foreach语句对数组成员进行遍历输出 * @author Lei * @version 2018-7-23 */ public class ForeachDemo { pub ...
- Effective JavaScript Item 51 在类数组对象上重用数组方法
Array.prototype对象上的标准方法被设计为也能够在其他对象上重用 - 即使不是继承自Array的对象. 因此,在JavaScript中存折一些类数组对象(Array-like Object ...
- 基于原生JS封装数组原型上的sort方法
基于原生JS封装数组原型上的sort方法 最近学习了数组的原型上内置方法的封装,加强了用原生JS封装方法的能力,也进一步理解数组方法封装的过程,实现的功能.虽然没有深入底层,了解源码.以下解法都是基于 ...
- 使用foreach语句对数组成员进行遍历
/*** 使用foreach语句对数组成员进行遍历* **/ public class ForeachDemo { public static void main(String[] args) { i ...
- 前端笔记之ES678&Webpack&Babel(中)对象|字符串|数组的扩展&函数新特性&类
一.对象的扩展 1.1对象属性名表达式 ES6可以在JSON中使用[]包裹一个key的名字.此时这个key将用表达式作为属性名(被当做变量求值),这个key值必须是字符串. var a = 'name ...
随机推荐
- 内存管理——Cocos2d-x学习历程(五)
Cocos2d-x采用了引用计数与自动回收的内存管理机制. 1.每个对象包含一个用来控制生命周期的引用计数器,它就是CCObject的成员变量m_u- Reference.我们可以通过retainCo ...
- php 异步处理的gearman
1. php 是进程处理,单线程到的,没有异步机制,在一些处理花费时间较多的情况导致用户体验较差.可以使用gearman 进行异步处理. 2. gearman 是一个异步处理的socket架构. 需要 ...
- what oop ?
最近在做一个app的后台代码.......到底是什么是Oop ,没有感觉到啊,,,,,
- Umbraco模型默认属性
Media Model的属性: umbracoFileumbracoWidthumbracoHeightumbracoBytesumbracoExtension
- PKCS#12
http://blog.csdn.net/cuiran/article/details/7816696 数字证书介绍 一.什么是数字证书 数字证书就是互联网通讯中标志通讯各方身份信息的一系列数据,提供 ...
- 优盘(U 盘) 采用TLC, MLC, SLC芯片 的区别 与使用寿命
最近一直在看大家在讨论sandisk,pny,金士顿等大厂都开始用tlc的芯片问题,让大家基本都不敢用U盘存数据了按照之前的擦写参数TLC 1000次MLC 10000次SL ...
- chrome 下的 proxy 插件安装
Install “Proxy SwitchyOmega” extensions for chrome.
- JEECMS用法总结
1.循环打印栏目: [@cms_channel_list] [#list tag_list as c] <li id="${c.path}"><a href=&q ...
- 面向对象程序设计-C++_课时16子类父类关系
初始化列表 类名::类名(形参1,形参2,...形参n):数据成员1(形参1),数据成员2(形参2),...,数据成员n(形参n) { ... } 规则1,初始化列表进行数据成员的初始化 规则2,初始 ...
- hdu - 1757 - A Simple Math Problem
题意:当x < 10时, f(x) = x: 当x >= 10 时,f(x) = a0 * f(x-1) + a1 * f(x-2) + + a2 * f(x-3) + …… + a9 ...