我正在尝试创建一个带有字符串属性的用于序列化/反序列化的 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/