【问题标题】:RestSharp serialization not serializing class name correctlyRestSharp序列化没有正确序列化类名
【发布时间】:2013-03-22 15:38:38
【问题描述】:

RestSharp 似乎没有注意我用以下方式装饰我的一个类名的“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>

您可以看到&lt;EmailAddress&gt; 元素似乎忽略了SerializeAs 属性,并且没有像我期望的那样序列化为“电子邮件地址”,而其他所有元素都可以正常工作。有谁知道为什么会发生这种情况或如何解决?

【问题讨论】:

  • 这个类public class ContactData..之上不需要属性吗? [SerializeAs(Name = "email-addresseses")]
  • 否,ContactData 正确序列化为“contact-data”,因为 Person 类中的 ContactData 属性使用 SerializeAs 属性进行修饰。似乎只是 EmailAddress 有问题。
  • 您可以尝试将其命名为其他名称或删除- 以查看是否存在命名冲突。我以前见过类似的东西,但暂时不记得我的网站的参考了用于解决相同的问题
  • 尝试将其重命名为“test” - 没有骰子。仍然序列化为“EmailAddress”。
  • 我刚刚注意到您可以更改或尝试改一下request.XmlSerializer = new XmlSerializer(typeof(Person));

标签: c# xml serialization restsharp


【解决方案1】:

在查看了 RestSharp 源代码后,我意识到这是 RestSharp 中内置的 XmlSerializer 中的一个错误。我已经修复它并提交了pull request

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-17
    • 2019-08-21
    相关资源
    最近更新 更多