c# - 序列化时带有特殊字符的 XML 元素名称
问题描述
在将对象序列化为 XML 时,我使用属性约定,就像[XmlElement("MyData:Pool1")]
我一样,它完成了这项工作,但 XML 看起来像
<_x005C_MyData_x003A_Pool1 >
我认为它转换为冒号或任何特殊字符转换为其他格式,我尝试在字符串前面使用反斜杠、@ 和 $ 符号进行更改,但这对我没有帮助。
除了使用字符串/正则表达式替换之外还有什么建议吗?
private void Serlise(Interface request)
{
var xsSubmit = new XmlSerializer(typeof(Interface));
var ns = new XmlSerializerNamespaces();
ns.Add("", "");
var xml = "";
using (var encoder = new CustomEncoder())
{
using (var writer = XmlWriter.Create(encoder))
{
xsSubmit.Serialize(writer, request,ns);
xml = encoder.ToString();
}
}
File.WriteAllText(@"output.xml", xml);
}
下面是要序列化的类
[System.SerializableAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://www.foo1.com/bar/test/")] [System.Xml. Serialization.XmlRootAttribute(ElementName = "Pool", Namespace = "http://www.foo1.com/bar/test/", IsNullable = false)] public partial class Root {
private Tester adminField;
private string versionField;
[XmlElement("Test:Pool1")]
public Tester Admin
{
get
{
return this.adminField;
}
set
{
this.adminField = value;
}
}
[System.Xml.Serialization.XmlAttributeAttribute()]
public string Version
{
get
{
return this.versionField;
}
set
{
this.versionField = value;
}
}
}
注意:由于 NDA,XML 上的命名空间和类名略有调整
<?xml version="1.0" encoding="utf-8"?><q1:MydataPool Version="1" xmlns:q1="http://www.foo1.com/bar/test"><q1:Data Id ="000123" Function="Hi"><q1:Hello Test="Abcd" /></q1:Data></q1:MydataPool>
解决方案
在属性属性中指定命名空间:
[XmlElement("Pool1", Namespace = "url")]
public Tester Admin
为此命名空间设置前缀:
var ns = new XmlSerializerNamespaces();
ns.Add("MyData", "url");
结果,你会得到
<MyData:Pool1>
推荐阅读
- android - AppInventor 2:按比例调整图像(画布)的大小以填充空间
- php - WooCommerce 批量更新/创建 webhook 不起作用
- file - jmeter 仅以 PDF 格式下载所有文件,即使所有文件都不是 PDF 格式
- java - OkHttp 加载签名证书
- python - ModuleNoFoundError:尝试运行 Flask 应用程序时没有名为“stuff”的模块异常
- javascript - 无法使用 jQuery 设置多个属性
- sitefinity - Sitefinity 动态模块字段自定义验证
- sql - 将基于间隔的表拆分为每日数据
- matlab - 按行而不是按列将矩阵写入文本文件
- python - 在 Python 中的 .csv 文件中为每条记录保存一个新的 .tsv 文件