직렬화 / 역 직렬화 할 EventType 및 Events 클래스가 있습니다. Xml for Events에는 "type"이라는 XmlElement가 있습니다.
<?xml version="1.0" encoding="UTF-8"?>
<events type="array">
<event>
<where />
<project-users-can-edit type="boolean">false</project-users-can-edit>
<description />
<attending-user-ids type="integer">164316</attending-user-ids>
<notify-user-names>Levent A.</notify-user-names>
<attending-user-names>Levent A.</attending-user-names>
<status>active</status>
<owner>
<first-name>Levent</first-name>
<id type="integer">164316</id>
<last-name>Arık</last-name>
</owner>
<reminders type="array" />
<notify-user-ids type="integer">164316</notify-user-ids>
<start>2015-06-22T00:00</start>
<repeat />
<all-day type="boolean">true</all-day>
<id type="integer">608945</id>
<end>2015-06-22T23:59</end>
<show-as-busy type="boolean">false</show-as-busy>
<last-changed-on type="date">2015-07-08T09:20:37Z</last-changed-on>
<privacy>
<type>company</type>
</privacy>
<attendees-can-edit type="boolean">false</attendees-can-edit>
*<type>
<name>Yıllık İzin</name>
<id type="integer">104109</id>
<color>C65518</color>
</type>*
<title>Yıllıkİzin</title>
</event>
</events>
하지만 EventTypes 목록과 다른 xmlelement 이름 "eventtypes"가있는 Xml도 있습니다.
<?xml version="1.0" encoding="UTF-8"?>
<eventtypes type="array">
<eventtype>
<name>Diğer</name>
<id type="integer">104285</id>
<color>E7C342</color>
</eventtype>
<eventtype>
<name>Hastalık</name>
<id type="integer">104284</id>
<color>399A5A</color>
</eventtype>
<eventtype>
<name>Mazeret İzni</name>
<id type="integer">104110</id>
<color>633C9C</color>
</eventtype>
<eventtype>
<name>ResmiTatil</name>
<id type="integer">104286</id>
<color type="integer">737173</color>
</eventtype>
<eventtype>
<name>Yıllık İzin</name>
<id type="integer">104109</id>
<color>C65518</color>
</eventtype>
</eventtypes>
나는 이것을 위해 아래 수업을 사용하고 있습니다. 그러나 eventtypes Xml을 deserialize하고 싶을 때 XmlRoot 속성의 제목 때문에 예외가 있습니다.
[Serializable]
[XmlRoot("type")]
public class EventType
{
public EventType()
{
}
[XmlElement("color")]
public string Color { get; set; }
[XmlElement("id")]
public string Id { get; set; }
[XmlElement("name")]
public string Name { get; set; }
}
동일한 속성을 가진 2 개의 다른 클래스를 작성할 수 있다는 것을 알고 있습니다. 하지만 다른 방법이 있는지 궁금합니다.
XmlRootAttribute
그 타입 (또는 타입의 열거)는 문서의 루트 요소 인 경우 속성은 타입에 사용되는 요소 이름을 제어한다. 그렇지 않으면 XmlElementAttribute.ElementName
유형을 참조 하는 속성 이름 또는 속성 값이 XML 요소 이름을 제어합니다. 따라서 EventType
다음과 같이 다른 외부 클래스에 포함될 때 클래스에 대해 다른 요소 이름을 갖는 충돌이 없습니다 .
[XmlRoot("eventtypes")]
public class EventTypeList
{
[XmlAttribute("type")]
public string Type { get; set; }
[XmlElement("eventtype")]
public List<EventType> EventTypes { get; set; }
}
[XmlRoot("events")]
public class EventList
{
[XmlAttribute("type")]
public string Type { get; set; }
[XmlElement("event")]
public List<Event> Events { get; set; }
}
[XmlRoot("event")]
public class Event // Prototype implementation only, many properties omitted.
{
[XmlElement("title")]
public string Title { get; set; }
// Remainder omitted for brevity.
[XmlElement("type")]
public EventType Type { get; set; }
}
예제 바이올린 .
덧붙여서 Serializable
이진 직렬화에만 유용하기 때문에 클래스 에서 속성을 제거 할 수 있습니다 .
[XmlRoot("type")]
public class EventType
{
public EventType() { }
[XmlElement("color")]
public string Color { get; set; }
[XmlElement("id")]
public string Id { get; set; }
[XmlElement("name")]
public string Name { get; set; }
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다