【问题标题】:Serialze class as single attribute-less element with its content set to one property将类序列化为单个无属性元素,其内容设置为一个属性
【发布时间】:2012-02-13 15:34:24
【问题描述】:

我想序列化/反序列化以下类型:

// The "NameEntity" element shouldn't appear in the XML
public class NameEntity
{
    [XmlElement("name")]
    public string Name { get; set; }
}

[XmlRoot("names")]
public class Names : List<NameEntity>
{
}

我希望序列化的 XML 匹配以下方案:

<?xml version="1.0" encoding="utf-8" ?>
<names>
  <name>Charlie</name>
  <name>Robert</name>
  <name>Nick</name>
</names>

其实输出的XML是:

<names>
  <NameEntity>
    <name>Charlie</name>
  </NameEntity>
  ...
</names>

这是否可以通过 .NET 中的 XML 属性之一实现,或者我必须实现 IXmlSerializable

【问题讨论】:

    标签: .net xml xml-serialization xmlserializer serializable


    【解决方案1】:

    您需要XmlType AttributeXmlText Attribute 的混合,就像这样......

    // The "NameEntity" element shouldn't appear in the XML
    [XmlType("name")]
    public class NameEntity
    {
        [XmlText]
        public string Name { get; set; }
    }
    
    [XmlRoot("names")]
    public class Names : List<NameEntity>
    {
    }
    
    public class SO
    {
        [Test]
        public void NameEntitySerialization()
        {
            var name = new NameEntity() { Name = "Austin" };
    
            var serialized = <YOUR SERIALIZATION CODE HERE>
            Console.WriteLine(serialized);
            Assert.AreEqual("<name>Austin</name>", serialized);
        }
    
        [Test]
        public void ListSerialization()
        {
            var names = new Names();
            names.Add(new NameEntity() {Name = "Austin"});
    
            var serialized = <YOUR SERIALIZATION CODE HERE>
            Console.WriteLine(serialized);
            Assert.AreEqual("<names>\r\n  <name>Austin</name>\r\n</names>",
              serialized);
        }
    }
    

    【讨论】:

    • @Shimmy:你是否也添加了[XmlText] 属性。那些测试通过了......(发布失败的测试是愚蠢的)
    • MY BAD sorry :'( 我确实用XmlText att. 装饰了Name 属性,但我忘记从之前删除XmlElement 仍然保留在那里(还有一堆其他验证属性和其他,我没有注意到它)...谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-05
    • 1970-01-01
    • 2015-05-06
    • 2014-12-10
    • 1970-01-01
    • 2021-04-12
    相关资源
    最近更新 更多