我有一個簡單的WCF服務,它有一個返回「複雜」對象(由簡單和集合屬性組成)的方法。當我調用此方法並查看生成的XML時,集合中的項目缺失值;但是,如果我在調試器中檢查.net對象,則集合及其值會正確填充。從WCF服務返回的XML中缺少收集項值
含有收集的類:
[DataContract]
public class MetadataResponse
{
[DataMember]
public int index;
[DataMember]
public int count;
[DataMember]
public int total;
[DataMember]
public MediaCollection[] mediaCollection;
[DataMember]
public MediaMetadata[] mediaMetadata;
}
所包含的項目類:
[DataContract]
public class MediaCollection
{
public String id;
public String title;
public Enum itemType;
public String artistId;
public String artist;
public String albumArtURI;
public Boolean canPlay;
public Boolean canEnumerate;
public Boolean canAddToFavorites;
public Boolean canScroll;
public Boolean canSkip;
}
一個返回對象的方法:
public MetadataResponse getMetadata(string id, int index, int count, bool recursive)
{
MetadataResponse metadataResponse = new MetadataResponse();
MediaCollection mediaCollectionItem = new MediaCollection();
// return a static collection for now
metadataResponse.index = 0;
metadataResponse.count = 3;
metadataResponse.total = 3;
metadataResponse.mediaCollection = new MediaCollection[3];
// add some items
mediaCollectionItem.id = "0001";
mediaCollectionItem.title = "foo";
metadataResponse.mediaCollection[0] = mediaCollectionItem;
mediaCollectionItem.id = "0002";
mediaCollectionItem.title = "bar";
metadataResponse.mediaCollection[1] = mediaCollectionItem;
mediaCollectionItem.id = "0003";
mediaCollectionItem.title = "choo";
metadataResponse.mediaCollection[2] = mediaCollectionItem;
return metadataResponse;
}
調試結果檢查所填充的對象:
{MurfieSoapApi.MetadataResponse}
count: 3
index: 0
mediaCollection: {MurfieSoapApi.MediaCollection[3]}
mediaMetadata: null
total: 3
從方法調用XML結果(仍在試圖弄清楚如何獲得StackOverflow的格式化這個...):
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header />
<s:Body>
<getMetadataResponse xmlns="http://www.sonos.com/Services/1.1">
<getMetadataResult xmlns:a="http://schemas.datacontract.org/2004/07/MurfieSoapApi" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<a:count>3</a:count>
<a:index>0</a:index>
<a:mediaCollection>
<a:MediaCollection />
<a:MediaCollection />
<a:MediaCollection />
</a:mediaCollection>
<a:mediaMetadata i:nil="true" />
<a:total>3</a:total>
</getMetadataResult>
</getMetadataResponse>
</s:Body>
</s:Envelope>
我已經試過,而不是其他的陣列集合類型(列表,等等),但結果總是相同的。我使用默認的web.config值,對於其他返回簡單結果的方法運行良好,但是當涉及到這種返回類型時,自動映射器可能無法勝任任務...不確定。
哇,我怎麼錯過了?但是,當我補充說,我不能用WCF測試客戶端(它在該方法上放置一個紅色的x)來測試它;這是可以預料的嗎? – jasongullickson 2012-04-11 14:33:29
這可能是因爲MediaCollection中的枚舉值。請閱讀更多信息:http://msdn.microsoft.com/en-us/library/aa347875.aspx – 2012-04-11 14:59:51