2012-05-15 6 views
0

xmlSerialzer를 사용하여 xml을 출력하는 WCF 서비스를 작성하려고합니다. DataContract Seriailzer를 사용하지 않는 XML 출력이 필요합니다. 특히 나는 정의 된 스키마 등을 가진 카탈로그 서비스 웹 (csw)을 작성 중이다.XMLSerializer를 사용하여 클래스 멤버에 특성 추가

나는 먼저 클래스를 작성한 다음 XML이 출력되고 있는지 테스트하려고 노력 해왔다. 이것은 다소 번거롭기 때문에 xsd 유틸리티로 전환 할 수 있습니다. 내가 알고 싶은 것은 다른 클래스 멤버에게 XML 속성을 추가 할 수 있습니까? 아니면 장식 된 xmlattributes만이 루트 요소, 즉 클래스 이름에만 추가됩니까? XDocument를 사용하여 손으로 CML을 작성하는 것보다 유연성 문제가있는 것으로 보입니다. 또한 (컬렉션이 아닌) 요소를 중첩해야 할 때마다 새 클래스를 만들어야하는 것 같습니다. 그게 맞습니까?

내가 필요로 출력 XML은 다음과 같습니다

public class ContactInfo 
     { 
      [XmlElement] 
      public string OnlineResource = "";   

      [XmlElementAttribute(ElementName = "OnlineResource",Namespace = "http://www.w3.org /1999/xlink")] 
      public string href = "mailto:[email protected]"; 

     } 

다음과 같이 XML을 출력합니다 : 여기

<ows:ContactInfo> 
<ows:OnlineResource 
    xlink:href="mailto:­­[email protected]­­"/> 
</ows:ContactInfo> 

내 클래스입니다

<ows:ContactInfo xlink:href="mailto:[email protected]"> 
<ows:OnlineResource>mailto:[email protected]</ows:OnlineResource> 
</ows:ContactInfo> 
+0

미안 내가 필요로하는 출력은 다음과 같습니다 [email protected] Euston

답변

2

당신은 변경해야됩니다 이것을 실현하기위한 객체 모델은 다음과 같습니다.

이것이 대한
[XmlType("ContactInfo")] 
public class ContactInfo 
{ 
    [XmlElement("OnlineResource")] 
    public OnlineResource Resource { get; set; } 
} 

[XmlType("OnlineResource")] 
public class OnlineResource 
{ 
    [XmlAttribute("href")] 
    public string href = "mailto:[email protected]"; 
} 

출력 ...

<ContactInfo> 
    <OnlineResource href="mailto:[email protected]" /> 
</ContactInfo> 

은 물론 당신이 등 당신의 네임 스페이스를 얻기 위해 조정해야하지만이 올바른 방향으로 향하고있다 ... 희망이 도움이 :)

예 .. 당신이 새로운 요소를 중첩시킬 때 당신은 새로운 수업이 필요할 것입니다. 어떻게 원시 값을 중첩 된 집합으로 만들 것인가?

+0

예, 고맙습니다. 그냥 많은 수업 창조에 익숙해 져야합니다! – Euston

+0

이 답변으로 문제가 해결 된 경우 답을 표시하십시오 :) – iDevForFun

관련 문제