c# - 序列化数组时去掉 <ArrayOfClassname> 根元素

标签 c# .net xml serialization

这是一个代码示例:

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

...

static void Main() 
{
    Person[] persons = new Person[] 
    {
        new Person{ FirstName = "John", LastName = "Smith"},
        new Person{ FirstName = "Mark", LastName = "Jones"},
        new Person{ FirstName= "Alex", LastName="Hackman"}
    };

    XmlSerializer xs = new XmlSerializer(typeof(Person[]), "");

    using (FileStream stream = File.Create("persons-" + Guid.NewGuid().ToString().Substring(0, 4) + ".xml")) 
    {
        xs.Serialize(stream, persons);
    }
}

这是输出:

<?xml version="1.0"?>
<ArrayOfPerson xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Person>
    <FirstName>John</FirstName>
    <LastName>Smith</LastName>
  </Person>
  <Person>
    <FirstName>Mark</FirstName>
    <LastName>Jones</LastName>
  </Person>
  <Person>
    <FirstName>Alex</FirstName>
    <LastName>Hackman</LastName>
  </Person>
</ArrayOfPerson>

这里有一个问题。如何摆脱根元素并像这样渲染人物:

<?xml version="1.0"?>
<Person>
  <FirstName>John</FirstName>
  <LastName>Smith</LastName>
</Person>
<Person>
  <FirstName>Mark</FirstName>
  <LastName>Jones</LastName>
</Person>
<Person>
  <FirstName>Alex</FirstName>
  <LastName>Hackman</LastName>
</Person>

谢谢!

最佳答案

这是你想要的格式错误的 XML,不可能通过 XmlSerializer 获得它,但你可以将 ArrayOfPersno 元素名称更改为 smothing else:

例子:

XmlSerializer xs = new XmlSerializer(typeof(Person[]),
                                     new XmlRootAttribute("Persons"));

会给你:

<?xml version="1.0"?>
<Persons xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Person>
    <FirstName>John</FirstName>
    <LastName>Smith</LastName>
  </Person>
  ...

关于c# - 序列化数组时去掉 <ArrayOfClassname> 根元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5885145/

相关文章:

Java:比较两个 xml 的最简单方法

c# - 使用 .NET 4 让程序最小化到系统托盘的最简单方法

c# - System.Diagnostics.Trace - 记录异常的正确方法

c# - 在 WPF 控件上显示 'loading' 指示符的最佳方法是什么

php - 使用 PHP 的 Rss 提要

xml - Shopify XML API 响应 - 无效的元素名称 : 3DSecureStatus

c# - 避免 Xamarin Camera 的 OK Retry 按钮

c# - 使用docker进行构建时,获取适用于入口点的 "Program does not contain a static ' Main'方法,为什么?

c# - 如何在 .net core 2.2 webapi 中访问 GitLab CI CD 环境变量

.net - XAML 中是否有公认的缩进属性样式?