C# XML序列化时如何为XmlAttribute添加XNamespace命名空间前缀
解决方案
你只需要给两个根节点属性的[XmlAttribute]特性显式指定和pidx前缀对应的命名空间即可,因为要生成带pidx前缀的属性,必须明确声明该属性属于http://www.api.org/pidXML/v1.0这个命名空间。
1. 修改Invoice实体类的属性标注
把Version和TransactionPurposeIndicator的特性修改为:
[XmlAttribute(AttributeName = "version", Namespace = "http://www.api.org/pidXML/v1.0")] public string Version { get; set; } [XmlAttribute(AttributeName = "transactionPurposeIndicator", Namespace = "http://www.api.org/pidXML/v1.0")] public string TransactionPurposeIndicator { get; set; }
2. (可选优化)移除冗余代码
你序列化方法里声明的Utf8StringWriter没有被实际使用,可以直接删除对应的using语句,避免无用资源分配:
public static void WriteXMLFile(this Models.Invoice openInvoice, string path) { XmlWriterSettings settings = new XmlWriterSettings(); settings.Encoding = new UTF8Encoding(false); settings.Indent = true; XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); ns.Add("pidx", "http://www.api.org/pidXML/v1.0"); ns.Add("xsi", "http://www.w3.org/2001/XMLSchema-instance"); XmlSerializer serializer = new XmlSerializer(typeof(Models.Invoice)); using (XmlWriter writer = XmlWriter.Create(path, settings)) { serializer.Serialize(writer, openInvoice, ns); } }
修改完成后重新生成序列化的XML,根节点的version和transactionPurposeIndicator属性就会自动带上pidx:前缀,和目标格式完全一致。
内容的提问来源于stack exchange,提问作者CodenameCain
相关产品推荐
相关产品推荐

