反序列化到对象
我想反序列化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
。
您的类似乎与您尝试反序列化的XML没有很多相似之处。如果你要创建你所创建的类XML,它会是这个样子:
<StaffingOrder>
<RequisitionID>1</RequisitionID>
<KellyBranch>3319</KellyBranch>
</StaffingOrder>
你想要什么,实际上代表了XML结构类:
[XmlRoot(Namespace = "StaffinfOrderNamespace")]
public class StaffingOrder
{
public OrderId OrderId { get; set; }
}
public class OrderId
{
[XmlAttribute("idOwner")]
public string IdOwner { get; set; }
[XmlElement("IdValue")]
public List<IdValue> IdValues { get; set; }
}
public class IdValue
{
[XmlAttribute("name")]
public string Name { get; set; }
[XmlText]
public int Value { get; set; }
}
为见this fiddle一个工作演示。
你真正拥有的是这个对象
public class OrderId
{
[XmlElement]
public IEnumberable<int> IdValue { get; set; }
}
的ElementName不会对name属性的工作。
有这样做,一个是改变你的类像查尔斯提到的2种方式,另一种是实现IXmlSerializable的贯彻自己的序列化逻辑。
IXmlSerializable的另一个优点是,如果您的XML结构在某个方向上发生了某些变化,您可以更改该实现,而不必改变类的结构。
你能帮我解释一下吗 – Rahul
这里有一篇关于代码项目的文章:http://www.codeproject.com/Articles/43237/How-to-Implement-IXmlSerializable-Correctly –
[反序列化具有多个元素属性的XML文件 - 属性不是反序列化]的可能重复(http://*.com/questions/14245846/deserializing-xml-file-with-multiple-element-attributes-attributes-are -not-des) – niksofteng