2011-08-03 3 views
1

XML 직렬 변환기 (DataContract 직렬화 기와 반대)에 의해 생성 된 XML을 반환하는 REStful WCF 서비스에서 작업하고 있습니다.WCF : XmlSerialization 특성이 루트 요소에 대해 무시되었습니다.

대부분의 개체는 올바르게 형식이 지정되지만 반환되는 루트 요소는 XML 직렬화 특성을 무시하는 것 같습니다.

예를 들어 리소스 /accounts/은 내 AccountList 클래스 (그 자체로 일련 화해야하는 속성이있는 내 자신의 ObjectList<T> 클래스의 하위 클래스)의 XML 직렬화 표현을 반환합니다. 그러나 나는 원하는 결과를 얻지 못하고있다. 여기

내 코드입니다 :

[XmlRoot("accounts")] 
public class AccountList : ObjectList<Account> { 
} 

public class ObjectList<T> : List<T> { 
    [XmlAttribute("foo")] 
    public Int32 FooProperty { get; set; } 
} 

[OperationContract] 
[WebGet(UriTemplate="/accounts")] 
public AccountList GetAccounts() { 
    return new AccountList() { 
     new Account("bilbo baggins"), 
     new Account("steve ballmer") 
    }; 
} 

그리고 이것은 웹 서비스에서 반환되는 것입니다 :

<arrayOfAccount> 
    <Account> 
     <name>biblo baggins</name> 
    </Account> 
    <Account> 
     <name>steve ballmer</name> 
    </Account> 
</arrayOfAccount> 

그래서 주요 문제는 AccountList 클래스에 내 원하는 직렬화가 무시되고 있는지 ("XmlElement ("name ")]을 사용하여 해당 속성을 소문자로 사용하는 방법을 알고 싶습니다.

고마워! 이 작업을하지만 방법에 다음 속성을 추가하려고합니다

답변

0

100 % 확인 :

[return:XmlArray("accounts")] 
[return:XmlArrayItem("account")] 

업데이트 :

이 위로 인해 작동하지 않습니다 [반품 : *]하지 속성 받고 집어 들었다. 일을 두 가지 옵션 :

당신이 AccountList이 목록을 포함 할, 그래서 같이,이 [XMLELEMENT ("계정")] 사용할 수 있습니다

[XmlRoot("accounts")] 
public class AccountList : ObjectList<Account> { 
    [XmlElement("account")] 
    public List<Account> Accounts { get; set; } 
} 

public class ObjectList<T> {//: List<T> { 
    [XmlAttribute("foo")] 
    public Int32 FooProperty { get; set; } 
} 

을 양자 택일로, 당신은 다양한 괜찮다면 response xml을 사용하면 래퍼 클래스를 추가하고 앞에서 설명한대로 [XmlArray] 및 [XmlarrayItem]을 사용할 수 있습니다.

[XmlRoot("response")] 
public class GetAccountResponse { 
    [XmlArray("accounts"), XmlArrayItem("account")] 
    public AccountList Accounts { get; set; } 
} 
+0

아니요, 전혀 작동하지 않았습니다. – Dai

+0

그래, [return : *] 속성이 너무 좋아지지 않는 것 같습니다. – alexdej

관련 문제