Как управлять выводом Wcf REST XmlSerialization - PullRequest
1 голос
/ 15 октября 2010

Я пытаюсь контролировать вывод Xml во время процесса сериализации Wcf Rest.Я хочу потерять уровень в выходной иерархии.(Т. Е. Потерять теги <content>).Я просмотрел различные доступные настройки атрибутов, но не смог найти то, что искал.Кто-нибудь может помочь?


Мой вывод в настоящее время:

<?xml version="1.0" encoding="utf-8" ?>
<ContentStructure xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"` xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <content>
    <content_item id="{BED36077-DECE-4FCA-BE8F-D6D450B6CC08}">
      <title><![CDATA[Content Title 1]]></title>
    </content_item>
    <content_item id="{BED36077-DECE-4FCA-BE8F-D6D450B6CC08}">
      <title><![CDATA[Content Title 1]]></title>
    </content_item>
    <content_item id="{BED36077-DECE-4FCA-BE8F-D6D450B6CC08}">
      <title><![CDATA[Content Title 1]]></title>
    </content_item>
  </content>
</ContentStructure>

Я пытаюсь получить:

<?xml version="1.0" encoding="utf-8" ?>
<ContentStructure xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <content_item id="{BED36077-DECE-4FCA-BE8F-D6D450B6CC08}">
    <title><![CDATA[Content Title 1]]></title>
  </content_item>
  <content_item id="{BED36077-DECE-4FCA-BE8F-D6D450B6CC08}">
    <title><![CDATA[Content Title 1]]></title>
  </content_item>
  <content_item id="{BED36077-DECE-4FCA-BE8F-D6D450B6CC08}">
    <title><![CDATA[Content Title 1]]></title>
  </content_item>
</ContentStructure>

Структура моего классавыглядит следующим образом:

[DataContract(Namespace = "")]  
public class ContentStructure  
{  
    [DataMember(Order = 0)]  
    [XmlArrayItem(ElementName = "content_item")]  
    public List<ContentItem> content { get; set; }  
}  

Где ContentItem содержит набор полей.

Мой сервис wcf определен как:

[WebHelp(Comment = "Returns content xml")]
[WebGet(UriTemplate = "/Content/Gallery", ResponseFormat = WebMessageFormat.Xml)]
[OperationContract(Name = "GetContent")]
[XmlSerializerFormat]
public ContentStructure GetContent()
{
    return ServiceProvider.GetContent();
}

Мой контракт:

public interface IServiceProvider
{
    ContentStructure GetContent();
}

Который реализован как:

public class ServiceProvider : IServiceProvider
{
    public ContentStructure GetContent()
    {
        return GetContentItems(CONTENT_ROOT);
    }
}

Заранее спасибо.

1 Ответ

1 голос
/ 21 октября 2010

Решение этой проблемы было довольно простым, и я подумал, что попробовал это до публикации вопроса.

Замена атрибута XmlArrayItem атрибутом [XmlElement ("content_item")] в свойстве Content свойства ContentStructureкласс делает свое дело.

[DataContract(Namespace = "")]   
public class ContentStructure   
{   
    [DataMember(Order = 0)]   
    [XmlElement("content_item")]   
    public List<ContentItem> Content { get; set; }   
} 
...