В c # как сделать имя поля отличным от того, когда оно сериализовано? - PullRequest
3 голосов
/ 11 января 2011

У меня есть служба WCF, которую я создал из XSD с клиента.Клиент XSD вызывает поле с именем 3rdPartyTrackingNumber.Потому что в C # у меня не может быть поля, которое начинается с числа, я назвал его ThirdPartyTrackingNumber.Есть ли метатег или что-то, что я могу поместить в столбец, который будет отображать его как 3rdartyTrackingNumber при сериализации?

public class OSSShipmentGroup
{
    public string status { get; set; }
    public string shipmentNumber { get; set; }
    public object shipFrom { get; set; }
    public string carrierName { get; set; }

    [Some meta tag here]
    public string ThirdPartyTrackingNumber {get; set;}
    public OSSOrderDates dates { get; set; }
    public OSSOrderAddress[] address {get; set;}
    public OSSOrderShipmentItem[] containedItems { get; set; }
    public OSSShipmentInvoice[] invoice {get; set;}
}

Я знаю, что могу реализовать ISerializable и внести изменения в GetObjectData, но если это толькоя надеялся, что могу добавить метатег в это поле.

Ответы [ 2 ]

6 голосов
/ 11 января 2011

Это зависит от того, какой сериализатор вы используете.Например, если вы используете DataContractSerializer , который используется по умолчанию в WCF basicHttpBinding и wsHttpBinding, вы можете использовать атрибут [DataMember]

[DataMember(Name = "ABC")]
public string ThirdPartyTrackingNumber { get; set; }

вы используете XmlSerializer , тогда атрибут [XmlElement] должен выполнить эту работу:

[XmlElement(ElementName = "ABC")]
public string ThirdPartyTrackingNumber { get; set; }
1 голос
/ 11 января 2011

Для WCF нормальный процесс состоит в том, чтобы аннотировать класс с [DataContract], каждое свойство с [DataMember], которое имеет необязательное свойство Name="foo".

Обратите внимание, что, добавляя атрибут уровня класса, вы говорите: «Я прямо скажу вам, какие элементы сериализовать; затем вы не можете просто аннотировать того, кого хотите переименовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...