具有 Name 属性的 C# XML 字符串元素

标签 c# xml-serialization xml-deserialization

我正在尝试创建一个带有字符串属性的用于序列化/反序列化的 C# 对象。 property需要生成一个元素,也有一个属性:

例如:

...
<Comment Name="CommentName"></Comment>
...

如果属性是一个字符串,我看不到如何添加属性,如果评论是一个具有 Name 和 Value 属性的对象,它会生成:

...
<Comment Name="CommentName">
    <Value>comment value</Value>
</Comment>
...

有什么想法吗?

最佳答案

您需要在类型上公开这 2 个属性并使用 [XmlText] 属性来指示它不应生成额外的元素:

using System;
using System.Xml.Serialization;
public class Comment
{
    [XmlAttribute]
    public string Name { get; set; }
    [XmlText]
    public string Value { get; set; }
}
public class Customer
{
    public int Id { get; set; }
    public Comment Comment { get; set; }
}
static class Program
{
    static void Main()
    {
        Customer cust = new Customer { Id = 1234,
            Comment = new Comment { Name = "abc", Value = "def"}};
        new XmlSerializer(cust.GetType()).Serialize(
            Console.Out, cust);
    }
}

如果您想将这些属性扁平化到对象本身(在我的示例中是 Customer 实例),您将需要额外的代码来使对象模型假装适合 XmlSerializer 想要,或者一个完全独立的 DTO 模型。

关于具有 Name 属性的 C# XML 字符串元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2085932/

相关文章:

c# - 如何捕获来自数据库的事件到 C#(聊天应用程序)

XML 自定义序列化

java - JAXB 编码器初始化

.net - 如何阻止 XmlSerializer 发出空标签?

xml - 如何在 Haxe for XML 中实现更好的序列化/反序列化?

c# - 如何使用 Razor 单选按钮正确实现 MVC3?

c# - 使用protobuf-net继承时如何选择字段编号?

c# - 将 XML 元素存在反序列化为 C# 中的 bool

c# - 将 xml 反序列化为对象时出错 : System. FormatException 输入字符串格式不正确

c# - 通过代码 WPF C# 的单元格样式