해당 기능 중 하나 인 웹 서비스에서 다음 형식의 XML을 받아 들일 수 있어야하고 deserialize 할 수 있어야하는 C# 라이브러리를 작성하고 있습니다. 그들.속성을 속성 또는 요소로 사용할 수있는 C#에서 XML 비 직렬화
양식 1 :
<results>
<sample>
<status>status message</status>
<name>sample name</name>
<igsn>unique identifier for this sample</igsn>
</sample>
</results>
양식 2 :
<results>
<sample name="sample name">
<valid code="InvalidSample">no</valid>
<status>Not Saved</status>
<error>error message</error>
</sample>
</results>
은 여기가 직렬화 복원하고있어 내 수업입니다 :이다
namespace MyNamespace
{
[XmlRoot(ElementName = "results")]
public class SampleSubmissionResponse
{
[XmlElement("sample")]
public List<SampleSubmissionSampleResultRecord> SampleList { get; set; }
...
}
public class SampleSubmissionSampleResultRecord
{
...
/* RELEVANT PROPERTY RIGHT HERE */
[XmlAttribute(Attribute = "name")]
[XmlElement(ElementName = "name")]
public string Name { get; set; }
...
}
public class SampleSubmissionValidRecord
{
...
}
}
문제 하나 개 XML 샘플에서, Sample 요소의 name 특성은 요소이고 다른 요소는 특성입니다. XmlAttribute와 XmlElement로 클래스의 속성을 꾸미면 XmlSerializer 인스턴스를 만들 때 예외가 발생합니다.
지금은 좋은 것으로 인터넷 검색을 해오 고 있으며이 상황을 다루는 문서를 찾을 수 없습니다. XML 스키마를 만들 때 동일한 요소의 특성과 자식 요소에 동일한 이름을 사용하지 않아야하기 때문에 이것이 확실하다고 생각합니다.
그래서 여기서 어떻게해야합니까?
하나의 솔루션은 서로 다른 유형에 대해 두 개의 완전히 별개의 모델을 갖는 것일 수 있습니다. 아마도 작동 할 것이지만 매우 우아 해 보이지는 않습니다.
또 다른 옵션은 IXmlSerializable을 구현하고 deserialize 메소드에서이를 처리하는 정교한 코드를 작성하는 것입니다. 그것은 간단한 문제에 대한 매우 장황한 해결책 일 것입니다.
제 3의 옵션 나는 XmlAttribute와 XmlElement를 동일한 속성 또는 동등한 "어느 하나의"속성에 적용하는 몇 가지 방법을 원합니다.
넷째 옵션 : 일관되게 하나의 양식을 사용하기 위해 XML이 제공하는 웹 서비스를 변경하십시오. 불행히도, 그것을 소유 한 사람들은 이것을 기꺼이하지 않을 수도 있습니다.
xmlattribute 및 xmlelement를 사용하여 diffrun 속성을 사용 해본 적이 있습니까? – ITGenius