2015-11-10 32 views
0

我需要在未来的XML数据的一个值:序列化收集与使用RestSharp

<trackingrequest> 
    <user>USERNAME</user> 
    <password>PASSWORD</password> 
    <trackingnumbers> 
     <trackingnumber>12345678901</trackingnumber> 
    </trackingnumbers> 
</trackingrequest> 

为了这个目的,我已经创造下一个型号:

[SerializeAs(Name = "trackingrequest")] 
public class DpdTrackingRequest 
{ 
    [SerializeAs(Name = "user")] 
    public string User { get; set; } 

    [SerializeAs(Name = "password")] 
    public string Password { get; set; } 

    [SerializeAs(Name = "trackingnumbers")] 
    [XmlArrayItem("trackingnumber")] 
    public IList<DpdTrackingNumber> TrackingNumbers { get; set; } 
} 

public class DpdTrackingNumber 
{ 
    public string Value { get; set; } 
} 

但是当我打电话AddXmlBody方法我看到下一个结果:

<trackingrequest> 
    <user>USERNAME</user> 
    <password>PASSWORD</password> 
    <trackingnumbers> 
     <DpdTrackingNumber> 
      <Value>12345678901</Value> 
     </DpdTrackingNumber> 
    </trackingnumbers> 
</trackingrequest> 

我怎么能结合<DpdTrackingNumber><Value>12345678901</Value></DpdTrackingNumber><trackingnumber>12345678901</trackingnumber>

回答

2

为了达到您的要求,我认为您必须将System.Xml.Serialization.XmlTextAttribute设置为DpdTrackingNumber.Value属性。

但是,RestRequestXmlSerializer默认为RestSharp.Serializers.XmlSerializer,并且它不能读取System.Xml.Serialization属性。
因此,在调用AddXmlBody方法之前,您必须将XmlSerializer重置为RestSharp.Serializers.DotNetXmlSerializer

dpdTrackingRequest.TrackingNumbers = new List<DpdTrackingNumber>(); 
dpdTrackingRequest.TrackingNumbers.Add(new DpdTrackingNumber { Value = "12345678901" }); 

RestRequest restRequest = new RestRequest(); 
// reset XmlSerializer 
restRequest.XmlSerializer = new RestSharp.Serializers.DotNetXmlSerializer(); 
var result = restRequest.AddXmlBody(dpdTrackingRequest); 

此外,您可能必须从IList改变TrackingNumbers类型ListDotNetXmlSerializer不能seriralize接口,以便DpdTrackingRequest类如下:

using System.Xml.Serialization; 

//was [SerializeAs(Name = "trackingrequest")] 
[XmlRoot("trackingrequest")] 
public class DpdTrackingRequest 
{ 
    //was [SerializeAs(Name = "user")] 
    [XmlElement("user")] 
    public string User { get; set; } 

    //was [SerializeAs(Name = "password")] 
    [XmlElement("password")] 
    public string Password { get; set; } 

    //was [SerializeAs(Name = "trackingnumbers")] 
    //from IList to List 
    [XmlArray("trackingnumbers")] 
    [XmlArrayItem("trackingnumber")] 
    public List<DpdTrackingNumber> TrackingNumbers { get; set; } 
} 

public class DpdTrackingNumber 
{ 
    [XmlText] 
    public string Value { get; set; } 
} 
+0

它的工作原理就像一个魅力。谢谢! – Neshta