1

我有一个旧系统,它在请求信息调用中返回 xml,其名称如下:

邮政编码字段,名字字段...

然后同一个系统有一个修改调用,它采用如下所示的 xml:

邮政编码,拳头名,姓氏....

有没有办法构建一个可以反序列化请求的对象,但用不同的名称序列化 xml 输出?

具体来说:

public class RequestInfo
{
    public string firstNameField{get;set;}
    public string lastNameField{get;set;}
}

public class ModifyInfo
{
    public string firstName{get;set;}
    public string lastName{get;set;}
    public ModifyInfo(){}
    public ModifyInfo(RequestInfo ri)
    {
        firstName = ri.firstNameField
        .....
    }
}

有没有办法通过说属性将它们变成同一个对象?

编辑

有没有办法让一个对象在反序列化时接受一个标签名称,然后在序列化时输出一个不同的名称?

<myTagField /> (反序列化到) myObj.MyTag (序列化到) < MyTag />

4

2 回答 2

5

请务必注意您正在使用的实际序列化程序。每个不同的序列化程序的工作方式都不同。

我假设你正在使用System.Xml.Serialization.XmlSerializer. 如果是这种情况,那么您希望System.Xml.Serialization像这样使用命名空间中的属性,例如 XmlElementAttribute:

public class Person
{
    [System.Xml.Serialization.XmlElement(ElementName = "firstNameField")]
    public string FirstName { get; set; }
}

这假定该字段是一个 XML 元素。如果是属性,请使用该XmlAttribute属性。

于 2013-10-02T17:21:39.473 回答
1

检查MSDN 上控制 XML 序列化的属性。您将需要 XmlElement 作为属性,并且可能需要 XmlRoot 作为根类。

如果您只需要在反序列化期间覆盖属性名称,则可以使用 XmlAttributeOverrides 动态定义属性:

public XmlSerializer CreateOverrider()
{
    XmlElementAttribute xElement = new XmlElementAttribute();
    xElement.ElementName = "firstName"; 

    XmlAttributes xElements = new XmlAttributes();
    xElements.XmlElements.Add(xElement);

    XmlAttributeOverrides xOver = new XmlAttributeOverrides();
    xOver.Add(typeof(RequestInfo), "firstNameField", xElements);

    XmlSerializer xSer = new XmlSerializer(typeof(RequestInfo), xOver);
    return xSer;
}
于 2013-10-02T17:21:28.740 回答