XML 同一对象序列化不同的元素名称
XML Serialization different elementName for same object
我在 ASP.Net Core
中有以下模型
[Serializable]
[XmlRoot(ElementName = "CREDIT")]
public class Credit
{
[XmlElement(ElementName = "D_numbern")]
public string Number get; set; }
}
我用StringWriter做了序列化,这样的问题我应该XML
<CREDITS>
<CREDIT ID="1">
<D_number1>06</D_number1>
</CREDIT>
<CREDIT ID="2">
<D_number2>06</D_number2>
</CREDIT>
</CREDITS>
我没有找到如何使每个学分的 n 动态化的解决方案。
在此先感谢您的帮助。
您所追求的不是 XmlSerializer
支持的东西,坦率地说,这通常是 xml 的糟糕设计;它不仅是多余的(xml 是有序的:没有必要告诉它你是项目 1/2/3),而且它对大多数 xml 工具,包括序列化器、模式验证者等
我的强烈建议 是重新考虑您想要的xml,如果不是您的想法,则挑战要求。如果 D_number42
将始终匹配作为父级的 ID="42"
,坦率地说,后缀毫无用处。如果只是在这些示例中巧合地看起来相同的不同数字,则:<D_number someattribute="42">06</D_number>
但是,如果您必须执行此操作,则必须通过 XDocument
、XmlDocument
或 XmlWriter
手动执行.
例如使用XmlWriter
:
static void WriteCredit(XmlWriter xml, string id, string number)
{
xml.WriteStartElement("CREDITS");
xml.WriteStartElement("CREDIT");
xml.WriteAttributeString("ID", id);
xml.WriteElementString("D_number" + id, number);
xml.WriteEndElement();
xml.WriteEndElement();
}
写入控制台的用法:
using (var xml = XmlWriter.Create(Console.Out))
{
WriteCredit(xml, "1", "06");
}
我在 ASP.Net Core
中有以下模型[Serializable]
[XmlRoot(ElementName = "CREDIT")]
public class Credit
{
[XmlElement(ElementName = "D_numbern")]
public string Number get; set; }
}
我用StringWriter做了序列化,这样的问题我应该XML
<CREDITS>
<CREDIT ID="1">
<D_number1>06</D_number1>
</CREDIT>
<CREDIT ID="2">
<D_number2>06</D_number2>
</CREDIT>
</CREDITS>
我没有找到如何使每个学分的 n 动态化的解决方案。 在此先感谢您的帮助。
您所追求的不是 XmlSerializer
支持的东西,坦率地说,这通常是 xml 的糟糕设计;它不仅是多余的(xml 是有序的:没有必要告诉它你是项目 1/2/3),而且它对大多数 xml 工具,包括序列化器、模式验证者等
我的强烈建议 是重新考虑您想要的xml,如果不是您的想法,则挑战要求。如果 D_number42
将始终匹配作为父级的 ID="42"
,坦率地说,后缀毫无用处。如果只是在这些示例中巧合地看起来相同的不同数字,则:<D_number someattribute="42">06</D_number>
但是,如果您必须执行此操作,则必须通过 XDocument
、XmlDocument
或 XmlWriter
手动执行.
例如使用XmlWriter
:
static void WriteCredit(XmlWriter xml, string id, string number)
{
xml.WriteStartElement("CREDITS");
xml.WriteStartElement("CREDIT");
xml.WriteAttributeString("ID", id);
xml.WriteElementString("D_number" + id, number);
xml.WriteEndElement();
xml.WriteEndElement();
}
写入控制台的用法:
using (var xml = XmlWriter.Create(Console.Out))
{
WriteCredit(xml, "1", "06");
}