3

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」にシリアライズされていないことがわかります。他のすべての要素は正常に機能しています。なぜこれが起こっているのか、それを修正する方法を知っている人はいますか?

4

1 に答える 1

4

RestSharp のソースを調べてみたところ、これは RestSharp に組み込まれている XmlSerializer のバグであることがわかりました。私はそれを修正し、pull requestを送信しました。

于 2013-03-22T22:45:54.290 に答える