我正在尝试将XML反序列化为C#对象。
我的XML如下:
<StaffingOrder xmlns='StaffinfOrderNamespace' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<OrderId idOwner="VMSAccess">
<IdValue name='RequisitionID'>1</IdValue>
<IdValue name='KellyBranch'>3319</IdValue>
</OrderId>
</StaffingOrder>
我的类为:
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
[XmlRoot("StaffingOrder")]
public class OrderId
{
[XmlElement(ElementName = "RequisitionID")]
public int RequisitionID { get; set; }
[XmlElement(ElementName = "KellyBranch")]
public int KellyBranch { get; set; }
}
我的WCF服务协定为:
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "UploadOrderDocument",
RequestFormat = WebMessageFormat.Xml,
ResponseFormat = WebMessageFormat.Xml,
BodyStyle = WebMessageBodyStyle.Bare)]
[XmlSerializerFormat]
OrderId UploadOrderDocument(string hrXML);
我正在尝试反序列化为:
public OrderId UploadOrderDocument(string hrXMLString)
{
OrderId orderId = new OrderId();
using (StringReader sr = new StringReader(hrXMLString))
{
XmlSerializer xs = new XmlSerializer(typeof(OrderId));
orderId = (OrderId)xs.Deserialize(sr);
var temp = orderId.RequisitionID;
}
return orderId;
}
我在反序列化时没有收到任何错误,但没有得到任何RequisitionID
值。
3条答案
按热度按时间pprl5pva1#
你的类看起来和你要反序列化的XML没有太多的相似之处。如果你要从你已经创建的类创建XML,它看起来像这样:
您需要的是实际表示XML结构的类:
请参阅this fiddle以取得工作示范。
t8e9dugd2#
有两种方法可以做到这一点,一种是像Charles提到的那样更改您的类,另一种是实现IXmlSerializable并实现您自己的序列化逻辑。
IXmlSerializable的另一个优点是,如果XML结构在过程沿着的某个地方发生了更改,则可以更改该实现,而不必更改类的结构。
qxgroojn3#
你实际上得到的是这个物体
ElementName不对name属性起作用。