"간단한"및 "컬렉션 속성"으로 구성된 "복잡한"개체를 반환하는 간단한 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;
}
디버거 결과 채워진 개체를 검사 :
(210)
{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
아마도 MediaCollection의 Enum 값 때문일 수 있습니다. 자세한 내용은 여기를 참조하십시오. http://msdn.microsoft.com/en-us/library/aa347875.aspx –