2016-11-04 151 views
0

所以目前我設法讓所有的列表項作爲一個XML響應:反序列化XML響應爲對象

XmlNode nodeListItems = ListObject.GetListItems(listName, viewName, query, viewFields, rowLimit, queryOptions, null); 

,當我檢查輸出,它工作正常(though-我認爲我最終會希望有某種過濾器,以避免最終返回所有結果)。

的數據是這樣的,當作爲XML數據讀取:

<?xml version="1.0" encoding="UTF-8"?> 
<rs:data xmlns:rs="urn:schemas-microsoft-com:rowset" ItemCount="3"> 
    <z:row xmlns:z="#RowsetSchema" ows_h_id="123" ows_Status="Needs To Be Run" ows_Report_x0020_Type="Incremental Code Review" /> 

    <z:row xmlns:z="#RowsetSchema" ows_h_id="456" ows_Status="On Master" ows_Report_x0020_Type="Code Review" /> 

    <z:row xmlns:z="#RowsetSchema" ows_h_id="789" ows_Status="--" ows_Report_x0020_Type="Code Review" /> 
</rs:data> 

我如何反序列化這一個類模型,如:

public Class ItemList 
    { 
    public int Hid {get; set; } 
    public string Status {get; set; } 
    public string Type {get; set; } 
    } 

是否有管理之間的映射任何工具Web服務項目來建模對象?

我最終將需要太發佈的數據,這樣會很有趣......

+0

取決於你用什麼樣的網絡服務。例如WCF提供.wsdl文件,Visual Studio可以生成wsdl文件中提供的所有類 – Fabio

+0

我正在使用Sharepoint 2007的通用Web服務訪問:https://msdn.microsoft.com/en-us/library/office /bb862916(v=office.12).aspx – Bitz

回答

1

您可以使用XML序列化屬性

[XmlRoot("data", Namespace = "urn:schemas-microsoft-com:rowset")] 
public class Data 
{ 
    [XmlElement("row", Namespace = "#RowsetSchema")] 
    public List<ItemList> Rows { get; set; } 
} 

public class ItemList 
{ 
    [XmlAttribute("ows_h_id")] 
    public int Hid {get; set; } 

    [XmlAttribute("ows_Status")] 
    public string Status {get; set; } 

    [XmlAttribute("ows_Report_x0020_Type")] 
    public string Type {get; set; } 
} 

然後用XmlSerializer的

var serializer = new XmlSerializer(typeof(Data)); 

var data = (Data)serializer.Deserialize(yourStreamReader); 

反序列化我對名字ows_Report_x0020_Type有一些疑問。 Affraid部分0020可以反序列化過程引起的問題:具有數字字符

避免在屬性名

+0

至於命名機制:它在Web Services for SP2007中的XML響應內容標準 – Bitz