RestSharp は、クラス名の 1 つを装飾した "SerializeAs" 属性に注意を払っていないようです。
人
[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; }
}
電子メールアドレス
[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>my@email.com</address>
<location>Work</location>
</EmailAddress>
</email-adresses>
</contact-data>
</person>
<EmailAddress>
要素が属性を無視しているように見え、SerializeAs
「email-address」にシリアライズされていないことがわかります。他のすべての要素は正常に機能しています。なぜこれが起こっているのか、それを修正する方法を知っている人はいますか?