Возвращение сериализации WCF - Noob - PullRequest
0 голосов
/ 13 ноября 2009

У меня есть объект, который я аккуратно сериализирую в это:

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

Ответы [ 2 ]

2 голосов
/ 13 ноября 2009

Вместо сериализации объекта вы можете попробовать вернуть его непосредственно из метода и оставить WCF для обработки сериализации:

[OperationContract]
[WebGet(UriTemplate = "format/{format}/userid/{userid}/sessionkey/{sessionkey}")]
YourObject Get(string format,string userid,string sessionkey);
1 голос
/ 13 ноября 2009

Оказывается, ответ был довольно прост.

[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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...