2013-03-22 1 views
3

RestSharp следует обратить внимание на атрибут «SerializeAs», что я украшенной один из моих имен классов с:RestSharp сериализации не сериализации имени класса правильно, кажется, не

Людьми

[Serializable, SerializeAs(Name = "person")] 
public class Person 
{ 
    [SerializeAs(Name = "first-name")] 
    public string FirstName { get; set; } 

    [SerializeAs(Name = "contact-data")] 
    public ContactData ContactData { get; set; } 
} 

КонтактныеДанные

public class ContactData 
{ 
    [SerializeAs(Name = "email-addresses")] 
    public List<EmailAddress> EmailAddresses { get; set; } 
} 

EmailAddres s

[SerializeAs(Name = "email-address")] 
public class EmailAddress 
{ 
    [SerializeAs(Name = "address")] 
    public string Address { get; set; } 

    [SerializeAs(Name = "location")] 
    public string Location { get; set; } 
} 

Я использую следующий код для сериализации XML:

var request = new RestRequest("people/{id}.xml", Method.PUT); 
request.AddParameter("id", person.Id, ParameterType.UrlSegment); 
request.XmlSerializer = new XmlSerializer(); 
request.AddBody(person); 

Однако полученный XML выглядит следующим образом:

<person> 
    <first-name>Scott</first-name> 
    <contact-data> 
     <email-adresses> 
      <EmailAddress> 
       <address>[email protected]</address> 
       <location>Work</location> 
      </EmailAddress> 
     </email-adresses> 
    </contact-data> 
</person> 

Вы можете видеть, что <EmailAddress> элемент, как представляется, игнорирует атрибут SerializeAs и не сериализуется в «адрес электронной почты», как я ожидал бы, пока все остальные будут ork просто отлично. Кто-нибудь знает, почему это может произойти или как это исправить?

+0

Вам не нужен атрибут выше этого класса 'public class ContactData' ..? '[SerializeAs (Name =" email-addresseses ")]' – MethodMan

+0

Нет, ContactData правильно сериализует «контактные данные», поскольку свойство ContactData в классе Person украшено атрибутом SerializeAs. Кажется, это просто EmailAddress, у которого есть проблема. – Scott

+0

Вы могли бы попытаться называть его чем-то другим или удалить '-', чтобы увидеть, является ли конфликт конфликтом. Я видел что-то подобное раньше, но не могу вспомнить ссылку на сайт, который я использовал для исправления той же проблемы. – MethodMan

ответ

4

После того, как я попытался найти источник RestSharp, я понял, что это ошибка в XmlSerializer, встроенном в RestSharp. Я исправил его и представил pull request.