2009-11-12 49 views
0

我有我序列很好地進入這個對象:它是作爲一個字符串返回該WCF序列化收益率 - 菜鳥

<?xml version="1.0" encoding="utf-8" ?> 
<people xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" userID="AX12345"> 
    <group groupID="1234_ABCD"> 
    <person name="Name 0" id="0" /> 
    <person name="Name 1" id="1" /> 
    <person name="Name 2" id="2" /> 
    <person name="Name 3" id="3" /> 
    </group> 
</people> 

[OperationContract] 
    [WebGet(UriTemplate = "format/{format}/userid/{userid}/sessionkey/{sessionkey}")] 
    string Get(string format,string userid,string sessionkey); 

當我查看返回數據這個服務,我明白了。

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> 
    <s:Header /> 
    <s:Body> 
    <GetResponse xmlns="http://tempuri.org/"> 
     <GetResult>**&lt;?xml version="1.0" encoding="utf-8"?&gt;&lt;people xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" userID="123BOBBY"&gt;&lt;group groupID="1234_ABCD"&gt;&lt;person name="Name 0" id="0" /&gt;&lt;person name="Name 1" id="1" /&gt;&lt;person name="Name 2" id="2" /&gt;&lt;person name="Name 3" id="3" /&gt;&lt;/group&gt;&lt;/people&gt;</**GetResult> 
    </GetResponse> 
    </s:Body> 
</s:Envelope> 

什麼,我想是這樣的:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> 
    <s:Header /> 
    <s:Body> 
    <GetResponse xmlns="http://tempuri.org/"> 
     <GetResult> 
     <people userID="AX12345"> 
      <group groupID="1234_ABCD"> 
      <person name="Name 0" id="0" /> 
      <person name="Name 1" id="1" /> 
      <person name="Name 2" id="2" /> 
      <person name="Name 3" id="3" /> 
      </group> 
     </people> 
     </GetResult> 
    </GetResponse> 
    </s:Body> 
</s:Envelope> 

我與這一切類型的小白,我知道我失去了一些東西簡單。有人可以幫我嗎?

感謝 P

回答

1

原來答案是相當簡單的。

[XmlSerializerFormat] 
[OperationContract] 
[WebGet(UriTemplate = "format/{format}/userid/{userid}/sessionkey/{sessionkey}")] 
string Get(string format,string userid,string sessionkey); 

的DataContractSerializer是默認的序列,並[XmlSerializerFormat]覆蓋系列化。

在我的班級我都添加了序列化屬性:

using System; 
using System.Collections.Generic; 
using System.Xml.Serialization; 

namespace Myapp 
{ 
    [XmlRoot("people")] 
    public class People 
    { 
     private string strUserID = ""; 
     private List<Group> lstGroup; 

     public People() 
     { 
      lstGroup = new List<Group>(); 
     } 

     [XmlAttribute("userID")] 
     public string UserID 
     { 
      get { return strUserID; } 
      set { strUserID = value; } 
     } 
     [XmlElement("group")] 
     public List<Group> Group 
     { 
      get { return lstGroup; } 
      set { lstGroup = value; } 
     } 

    } 
} 

雖然我很高興與短期收益,我會找更深入是爲了確保我保持輸出的控制。

感謝

P

2

相反,序列化,你可以嘗試直接從方法返回它離開WCF處理序列化對象:

[OperationContract] 
[WebGet(UriTemplate = "format/{format}/userid/{userid}/sessionkey/{sessionkey}")] 
YourObject Get(string format,string userid,string sessionkey); 
+0

嗨 - 感謝這麼快作出反應。 我試圖序列化的原因是WCF將返回的對象封裝在它自己的標記方案中 - 它在所有數據標記之前預先 Peter 2009-11-13 00:29:32

+0

嗯 - 我發現這個:http://msdn.microsoft.com/en-us/magazine/cc163569.aspx 我會檢查出來併發布我的發現 - 看起來它可能對我有用 - 睡前閱讀12頁;) – Peter 2009-11-13 04:03:48