Zholen
Zholen

Reputation: 1790

Serialize/Deserialize different property names?

I have an old system which in a request info call returns xml with names that look like:

postalCodeField, firstNameField...

That same system then has a modify call which takes xml that looks like:

PostalCode, fistName, lastName....

Is there a way to build an object that would deserialize the request, yet serialize the xml output with different names?

Specifically:

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
        .....
    }
}

Is there a way through say attributes to make these into the same object?

EDIT

Is there a way to have a single object that would accept one tag name on deserialize, then output a different name on serialize?

< myTagField /> (deserialize to) myObj.MyTag (serialize to) < MyTag />

Upvotes: 1

Views: 6522

Answers (2)

PashaPash
PashaPash

Reputation: 2056

Check Attributes That Control XML Serialization on MSDN. You will need XmlElement for properties and, possibly, XmlRoot for root class.

If you need to override property names only during deserialization, than you can define attributes dynamically, using 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;
}

Upvotes: 1

Trevor Elliott
Trevor Elliott

Reputation: 11252

It's important to note which actual serializer you're using. Every different serializer works differently.

I assume you're using the System.Xml.Serialization.XmlSerializer. If that is the case, then you want to use the attributes in the System.Xml.Serialization namespace such as XmlElementAttribute like so:

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

This assumes the field is an XML element. If it's an attribute, use the XmlAttribute attribute.

Upvotes: 5

Related Questions