2009-11-12 3 views
0

У меня есть объект, который я сериализовать приятно в это:WCF сериализации Return - Noob

<?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

+0

Хммм - я нашел это: http://msdn.microsoft.com/en-us/magazine/cc163569.aspx Я проверю и опубликую свои выводы - похоже, что это может сработать для меня - 12 страниц постельного чтения;) – Peter

Смежные вопросы