如何控制Wcf REST XmlSerialization输出

时间:2010-10-15 11:43:14

标签: c# wcf xml-serialization

我试图在Wcf Rest序列化过程中控制Xml输出。我想在输出层次结构中丢失一个层。 (即失去<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 个答案:

答案 0 :(得分:1)

对此的解决方案非常简单,我认为在发布问题之前我已经尝试过了。

使用ContentStructure类的Content属性上的[XmlElement(“content_item”)]属性替换XmlArrayItem属性可以解决问题。

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