2010-10-15 39 views
1

我想在Wcf Rest序列化過程中控制Xml輸出。我想在輸出層次中失去一層。 (即丟失了<content>標籤)。我已經瀏覽了各種可用的屬性設置,但無法找到我要找的內容。誰能幫忙?如何控制Wcf REST XmlSerialization輸出


我的輸出是目前:

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

解決這個問題非常簡單,我以爲在發佈問題之前我已經嘗試過了。

使用ContentStructure類的Content屬性上的[XmlElement(「content_item」)]屬性來替換XmlArrayItem屬性是否有效。

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