2009-06-05 5 views
4

Xml 클래스를 내부 클래스로 serialize 할 수 있어야하므로 IXmlSerializable을 구현해야합니다.컬렉션을 포함하는 클래스에 대한 IXmlSerializable 구현

이 클래스에는 2 개의 문자열과 목록이 있습니다.

나는 WriteElementString & ReadElementContentAsString을 사용하여 문자열을 읽고 쓰는 것을 알고 있습니다.

그러나 읽는 방법에 대해 분실했습니다. & ReadXml & WriteXml 메서드로 List를 작성합니다.

어떻게해야합니까? 또는 내부 액세스 가능성을 유지하면서 개체를 serialize하고 deserialize 할 수있는 방법이 있습니까?

+0

public void WriteXml(XmlWriter writer) { writer.WriteStartElement("XmlSerializable"); writer.WriteElementString("Integer", Integer.ToString()); writer.WriteStartElement("OtherList"); writer.WriteAttributeString("count", OtherList.Count.ToString()); var otherSer = new XmlSerializer(typeof(OtherClass)); foreach (var other in OtherList) { otherSer.Serialize(writer, other); } writer.WriteEndElement(); writer.WriteEndElement(); } public void ReadXml(XmlReader reader) { reader.ReadStartElement("XmlSerializable"); reader.ReadStartElement("Integer"); Integer = reader.ReadElementContentAsInt(); reader.ReadEndElement(); reader.ReadStartElement("OtherList"); reader.MoveToAttribute("count"); int count = int.Parse(reader.Value); var otherSer = new XmlSerializer(typeof (OtherClass)); for (int i=0; i<count; i++) { var other = (OtherClass) otherSer.Deserialize(reader); OtherList.Add(other); } reader.ReadEndElement(); reader.ReadEndElement(); } 
은, 내가 [비트 쉬프트] 않았다 알고 (http://paltman.com/2006/jul/03/ixmlserializable-a-persistable-example/) –

답변

8

목록 자체에 대해 <List> 요소를 작성한 다음 항목을 반복하고 <Item> 요소로 쓸 수 있습니다.

요소가 XML 직렬화 될 수있는 클래스의 인스턴스 인 경우 요소 형식에 대한 XmlSerializer 인스턴스를 만든 다음 각 요소를 이미 사용중인 동일한 XmlWriter로 직렬화하면됩니다. 예 :


당신은이 링크를 유용하게 찾을 수 있습니다
+2

List <>는 IXmlSerializable을 구현하지 않으며 공용 액세스 때문에 serialize 가능합니다. 위와 같이 작성하는 것이 좋지만 목록의 항목을 코드에 중첩 시키려면 어떻게해야합니까? 나중에 중첩에서 제거하려면 어떻게합니까? 어떤 방법을 통해이를 수행해야합니까? –

+1

코드의 래퍼 요소에 문제가 있습니다 (http://www.codeproject.com/KB/XML/ImplementixmlSerializable.aspx에서 ReadXml 및 WriteXml을 올바르게 구현하는 방법을 설명합니다) – jdehaan

관련 문제