序列化枚举类型会发出不同的元素名称

Amz*_*ath 0 .net c# xmlserializer

致力于XML序列化.序列化枚举类型时,要更改它的xml元素名称.任何帮助,将不胜感激.

我使用.Net xml序列化来序列化这个对象,并产生下面的xml输出

<MyEnums>   <MyEnum>One</MyEnum>    <MyEnum>Two</MyEnum>    <MyEnum>Three</MyEnum></MyEnums>
Run Code Online (Sandbox Code Playgroud)

这是班级

public class Request
{
        public List<MyEnum> MyEnums { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这是我想要发出的XML

<MyEnums>
<ModifiedElementName>One</ModifiedElementName>
<ModifiedElementName>Two</ModifiedElementName>
<ModifiedElementName>Three</ModifiedElementName>
Run Code Online (Sandbox Code Playgroud)

这是Enum Type

enum MyEnum
{
    One,
    Two,
    Three
}
Run Code Online (Sandbox Code Playgroud)

期望输出为xml

<ModifiedElementName>One</ModifiedElementName>
Run Code Online (Sandbox Code Playgroud)

小智 5

你可以使用你的XmlType属性enum,如下所示:

using System;
using System.Collections.Generic;
using System.IO;
using System.Xml.Serialization;

namespace Scratch
{
    [XmlType("ModifiedEnumName")]
    public enum TestEnum
    {
        One,
        Two,
        Three,
    }

    public class TestClass
    {
        public TestClass()
        {
            MyEnums = new List<TestEnum>();
        }

        public List<TestEnum> MyEnums { get; set; }
    }

    static class Program
    {
        static void Main(string[] args)
        {
            using (var sw = new StringWriter())
            {
                new XmlSerializer(typeof(TestClass)).Serialize(sw, new TestClass { MyEnums = { TestEnum.Two } });
                Console.WriteLine(sw.GetStringBuilder());
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这输出

<?xml version="1.0" encoding="utf-16"?>
<TestClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <MyEnums>
    <ModifiedEnumName>Two</ModifiedEnumName>
  </MyEnums>
</TestClass>
Run Code Online (Sandbox Code Playgroud)

编辑:这假设所有TestEnum需要以相同的方式序列化.如果您希望能够为同一类型的不同属性指定不同的XML元素名称,请使用carlosfigueira的答案.