2013-03-22 97 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小号

[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属性,并没有被序列化为“email-address”,正如我所期望的那样,而所有其他的w奥克就好了。有谁知道为什么这可能会发生或如何解决它?

+0

你不需要这个类'公共类ContactData'上面的属性吗? '[SerializeAs(Name =“email-addresseses”)]' – MethodMan 2013-03-22 15:43:10

+0

不,ContactData序列化为“contact-data”,因为Person类中的ContactData属性使用SerializeAs属性装饰。这似乎只是EmailAddress有问题。 – Scott 2013-03-22 15:45:25

+0

你可以尝试命名它别的东西或删除'-'看看它是否是一个命名冲突..我以前见过类似这样的东西,但离手不记得我用来解决同一问题的网站的参考 – MethodMan 2013-03-22 15:50:47

回答

4

在对RestSharp源代码进行调用后,我意识到这是在RestSharp中内置的XmlSerializer中的一个错误。我已修复并提交了pull request