c# - XMLSerializer 更改元素的名称

标签 c# xml serialization

我正在尝试序列化对象以导入到另一个软件,问题是,要导入的 XML 中的元素包含“:”(例如:< ftr:filter>)。
我用 [XmlAttribute("ftr:filter")] 声明了覆盖这些名称的类和 [XMLElement(ftr:differentFilter")] ,但序列化器产品不同的节点。我打赌它与编码有关,但我无法更改结果(以为我更改了编码)。
类示例:

public class ListPrijemkaRequest
{
    [XmlAttribute("version")]
    public string Version { get; set; }
    [XmlAttribute("prijemkaVersion")]
    public string PrijemkaVersion { get; set; }
    [XmlElement("lst:requestPrijemka")]
    public List<RequestPrijemka> Requests { get; set; }
}

public class RequestPrijemka
{
    [XmlElement("ftr:filter")]
    public RequestDateFilter Filter { get; set; }
}

期望的输出:

< lst:listPrijemkaRequest version="2.0" prijemkaVersion="2.0">
    < lst:requestPrijemka>
        < ftr:filter>
            < ftr:dateFrom>2013-01-10</ftr:dateFrom>
            < ftr:dateTill>2013-03-30</ftr:dateTill>
        < /ftr:filter>
    < /lst:requestPrijemka>
< /lst:listPrijemkaRequest>

获得的输出:

< lst_x003A_listPrijemkaRequest version="2.0" prijemkaVersion="2.0">
    < lst_x003A_requestPrijemka>
        < ftr_x003A_filter>
            < ftr_x003A_dateFrom>2013-01-10</ftr_x003A_dateFrom>
            < ftr_x003A_dateTill>2013-03-30</ftr_x003A_dateTill>
        < /ftr_x003A_filter>
    < /lst_x003A_requestPrijemka>
< /lst_x003A_listPrijemkaRequest>

最佳答案

如果那些“标签”ftr/lst 是命名空间,则无需对它们进行“硬编码”,您可以设置序列化程序以使用这些命名空间。

http://msdn.microsoft.com/en-us/library/ms163161%28v=vs.110%29.aspx

例子(取自XML Serialization and namespace prefixes)

[XmlRoot("Node", Namespace="http://your.companies.namespace")]
public class ListPrijemkaRequest {
    [XmlElement("requestPrijemka")]
    public List<RequestPrijemka> Requests { get; set; }
}

static class Program
{
    static void Main()
    {
        XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
        ns.Add("lst", "http://your.companies.namespace");
        XmlSerializer xser = new XmlSerializer(typeof(ListPrijemkaRequest));
        xser.Serialize(Console.Out, new ListPrijemkaRequest(), ns);
    }
}

如果不是,我认为“默认”序列化是不可能的。

其他选项:

但正如我在评论中所说,不建议首先在节点名称中使用 :!

关于c# - XMLSerializer 更改元素的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24803001/

相关文章:

c++ - 如何将json对象转换为QObject?

c# - 你如何让 System.Web.Script.javascriptSerializer 忽略一个属性?

javascript - 使用带有嵌套 "list"的 .NET deserialize() 进行 JSON 解析

c# - 在 32 位和 64 位 C# 世界中使用 System.Data.SQLite 的选项

c# - 如何使用 C# 以编程方式定位我的 Google Drive 文件夹?

java - Saxon-HE 集成扩展功能

javascript - 使用 JavaScript 从架构生成 XML

c# - DocumentDb CreateDocumentQuery 停止工作

c# - 无法确定类型 "Class"的 JSON 对象类型

java - 在另一个 xsd 中引用另一个 xsd 元素?