List <>에서 상속 받고 CollectionDataContract를 사용하는 매우 간단한 사용자 정의 컬렉션 유형이 있습니다.WCF와 DataContractSerializer는 CollectionDataContract로 장식 된 컬렉션 형식을 다르게 serialize합니까?
DataContractSerializer.WriteObject를 사용하여 직렬화 할 때 예상대로 CollectionDataContract 특성을 사용합니다. 그러나 WCF 메서드의 반환 형식으로 사용할 때 기본 ArrayOfFoo가 표시됩니다.
서비스 계약에 누락 된 장식이 있는지 궁금합니다.
세부 사항 : 난 그냥 푸를 인스턴스화 한 다음 직렬화 DataContractSerializer.WriteObject를 사용하는 경우
[DataContract(Namespace = "")]
public class Foo
{
[DataMember]
public string BarString { get; set; }
}
[CollectionDataContract(Namespace = "")]
[Serializable]
public class FooList : List<Foo> {}
, 난 당신이 기대하는 것을 얻을 :
<FooList>
<Foo>
<BarString>myString1</BarString>
</Foo>
</FooList>
그러나, 나는이있는 경우 이와 같은 방법으로 서비스하십시오 ...
[ServiceContract Name = "MyService"]
public interface IMyService
{
[OperationContract, WebGet(UriTemplate = "foos/")]
FooList GetAllFoos();
}
에 대해 GET을 수행하십시오.은,이 얻을 :
<ArrayOfFoo>
<Foo>
<BarString>myString1</BarString>
</Foo>
</ArrayOfFoo>
나는 또한 CollectionDataContract 속성에 이름 = "MyFooListName"를 지정 시도했습니다. 같은 결과 : DataContractSerializer는 메모를 가져옵니다. WCF는 그렇지 않습니다.
저는 네가 목록을 배열로 변환한다고 생각합니다. –
컬렉션 유형을 사용자 지정하지 않으면 목록이 배열로 직렬화됩니다. 알아 내려고하는 것은 WCF가 내 CollectionDataContract를 존중할 수있는 방법이 있는지 여부입니다. – pisomojado