.NET(C#):在数组成员上加入XmlElement特性

简介: 原文 www.cnblogs.com/mgen/archive/2011/12/04/2276131.html 当对如下类进行XML序列化时: publicclassa {     publicint[] arr =newint[] { 1, 2, 3 }; }   结果会是:             1         2         3       数组字段会成为单独的XML元素。

原文 www.cnblogs.com/mgen/archive/2011/12/04/2276131.html

当对如下类进行XML序列化时:

publicclassa

{

    publicint[] arr =newint[] { 1, 2, 3 };

}

 

结果会是:

<axmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

   xmlns:xsd="http://www.w3.org/2001/XMLSchema">

    <arr>

        <int>1</int>

        <int>2</int>

        <int>3</int>

    </arr>

</a>

 

数组字段会成为单独的XML元素。

而如果在类型的数组成员上加入XmlElement特性,生成的XML不会有最外的字段名称XML元素,比如这样:

publicclassa

{

    [XmlElement(Type =typeof(int))]

    publicint[] arr =newint[] { 1, 2, 3 };

}

 

结果会生成这样的XML:

<axmlns: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>

 

或许你在质疑这样的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))]

        publicint[] arr =newint[] { 1, 2, 3 };

    }

 

    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>

反序列化

1

2

3

 

你可以添加多个XmlElement特性(如果数组会指向派生类的数组)。比如a的arr字段是一个object数组:

publicobject[] arr =newobject[] { 12, "hehe", Guid.NewGuid() };

 

输出XML:

<axmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

   xmlns:xsd="http://www.w3.org/2001/XMLSchema">

    <arr>

        <anyTypexsi:type="xsd:int">12</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))]

publicobject[] arr =newobject[] { 12, "hehe", Guid.NewGuid() };

 

输出XML:

<axmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

   xmlns:xsd="http://www.w3.org/2001/XMLSchema">

    <int>12</int>

    <string>hehe</string>

    <guid>58359cd3-afe3-4650-b222-9b3ff5df186a</guid>

</a>

作者:Mgen
出处:www.cnblogs.com/mgen
其他参考页面:我的软件和工程博客导读

目录
相关文章
|
1月前
|
Java 物联网 C#
C#/.NET/.NET Core学习路线集合,学习不迷路!
C#/.NET/.NET Core学习路线集合,学习不迷路!
|
4天前
|
开发框架 监控 .NET
C#进阶-ASP.NET WebForms调用ASMX的WebService接口
通过本文的介绍,希望您能深入理解并掌握ASP.NET WebForms中调用ASMX WebService接口的方法和技巧,并在实际项目中灵活运用这些技术,提高开发效率和应用性能。
22 5
|
12天前
|
算法 Java 测试技术
Benchmark.NET:让 C# 测试程序性能变得既酷又简单
Benchmark.NET是一款专为 .NET 平台设计的性能基准测试框架,它可以帮助你测量代码的执行时间、内存使用情况等性能指标。它就像是你代码的 "健身教练",帮助你找到瓶颈,优化性能,让你的应用跑得更快、更稳!希望这个小教程能让你在追求高性能的路上越走越远,享受编程带来的无限乐趣!
59 13
|
1月前
|
编译器 C# 开发者
C# 9.0 新特性解析
C# 9.0 是微软在2020年11月随.NET 5.0发布的重大更新,带来了一系列新特性和改进,如记录类型、初始化器增强、顶级语句、模式匹配增强、目标类型的新表达式、属性模式和空值处理操作符等,旨在提升开发效率和代码可读性。本文将详细介绍这些新特性,并提供代码示例和常见问题解答。
42 7
C# 9.0 新特性解析
|
29天前
|
自然语言处理 物联网 图形学
.NET 技术凭借其独特的优势和特性,为开发者们提供了一种高效、可靠且富有创造力的开发体验
本文深入探讨了.NET技术的独特优势及其在多个领域的应用,包括企业级应用、Web应用、桌面应用、移动应用和游戏开发。通过强大的工具集、高效的代码管理、跨平台支持及稳定的性能,.NET为开发者提供了高效、可靠的开发体验,并面对技术更新和竞争压力,不断创新发展。
45 7
|
28天前
|
开发框架 .NET C#
.NET 技术凭借高效开发环境、强大框架支持及跨平台特性,在软件开发中占据重要地位
.NET 技术凭借高效开发环境、强大框架支持及跨平台特性,在软件开发中占据重要地位。从企业应用到电子商务,再到移动开发,.NET 均展现出卓越性能,助力开发者提升效率与项目质量,推动行业持续发展。
27 4
|
1月前
|
Java 物联网 编译器
C#一分钟浅谈:.NET Core 与 .NET 5 区别
本文对比了 .NET Core 和 .NET 5,从历史背景、主要区别、常见问题及易错点等方面进行了详细分析。.NET Core 侧重跨平台支持和高性能,而 .NET 5 在此基础上统一了 .NET 生态系统,增加了更多新特性和优化。开发者可根据具体需求选择合适的版本。
47 7
|
1月前
|
人工智能 开发框架 前端开发
C#/.NET/.NET Core技术前沿周刊 | 第 12 期(2024年11.01-11.10)
C#/.NET/.NET Core技术前沿周刊 | 第 12 期(2024年11.01-11.10)
|
1月前
|
开发框架 网络协议 .NET
C#/.NET/.NET Core优秀项目和框架2024年10月简报
C#/.NET/.NET Core优秀项目和框架2024年10月简报
|
1月前
|
C# 开发者
C# 10.0 新特性解析
C# 10.0 在性能、可读性和开发效率方面进行了多项增强。本文介绍了文件范围的命名空间、记录结构体、只读结构体、局部函数的递归优化、改进的模式匹配和 lambda 表达式等新特性,并通过代码示例帮助理解这些特性。
36 2