c# - 带前缀的 XML 序列化元素

标签 c# xml xml-serialization

<?xml version="1.0" encoding="UTF-8"?>
<rs:model-request xsi:schemaLocation="http://www.ca.com/spectrum/restful/schema/request ../../../xsd/Request.xsd " xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rs="http://www.ca.com/spectrum/restful/schema/request" throttlesize="100">
<rs:target-models>

我无法理解 C# XmlSerializer。我已经成功地序列化了没有前缀的元素,例如上面的 rs:* 。我也无法找到如何添加 xsi:、xmlns:xsi 和 xmlns:rs(命名空间?)。

有人能够创建一个简单的类来展示如何生成上述 XML 吗?

最佳答案

字段、属性和对象可以具有与其关联的命名空间以用于序列化目的。您可以使用 [XmlRoot(...)]、[XmlElement(...)] 和 [XmlAttribute(...)] 等属性指定命名空间:

[XmlRoot(ElementName = "MyRoot", Namespace = MyElement.ElementNamespace)]
public class MyElement
{
    public const string ElementNamespace = "http://www.mynamespace.com";
    public const string SchemaInstanceNamespace = "http://www.w3.org/2001/XMLSchema-instance";

    [XmlAttribute("schemaLocation", Namespace = SchemaInstanceNamespace)]
    public string SchemaLocation = "http://www.mynamespace.com/schema.xsd";

    public string Content { get; set; }
}

然后,您可以在序列化过程中使用 XmlSerializerNamespaces 对象关联所需的命名空间前缀:

var obj = new MyElement() { Content = "testing" };
var namespaces = new XmlSerializerNamespaces();
namespaces.Add("xsi", MyElement.SchemaInstanceNamespace);
namespaces.Add("myns", MyElement.ElementNamespace);
var serializer = new XmlSerializer(typeof(MyElement));
using (var writer = File.CreateText("serialized.xml"))
{
    serializer.Serialize(writer, obj, namespaces);
}

最终的输出文件如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<myns:MyRoot xmlns:myns="http://www.mynamespace.com" xsi:schemaLocation="http://www.mynamespace.com/schema.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <myns:Content>testing</myns:Content>
</myns:MyRoot>

关于c# - 带前缀的 XML 序列化元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28415727/

相关文章:

iphone - 在 iOS 上创建 Excel XLS 文件

xml - 如何动态读取类 XmlTypeAttribute 以获取命名空间?

php - 将 DOMNodes 从一个 DOMDocument 复制到另一个

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

c# - Math.Log 与几何平均数的乘法复杂度哪个更好?

c# - 多嵌套 FirstOrDefault

c# - 如何在 SQL Server 连接字符串中隐藏用户 ID/密码?

c# - 在 IIS 上运行发布版本时出现 Blazor WebAssembly InvalidCastException

c# - 序列化为这种格式的类布局

c# - 使用 XSD 文件在 C# 中生成 XML 文件