XML을 사용하지만 사용자 고유의 직렬 변환기를 작성하십시오. 이 사람이 읽을 수있는 정도를 고려하는 경우
<TopObject>
<SubObject>
<SubObject>
etc.
</SubObject>
<SubObject>
etc.
</SubObject>
</SubObject>
<SubObject></SubObject>
</TopObject>
나도 몰라,하지만 물건 닷넷 시리얼이 더 낫다 : 당신은 간단한 XML 형식을 만들 .NET의 XML 리더/라이터 클래스를 사용할 수 있습니다 만듭니다. 재귀 적으로 읽기/쓰기가 쉬울 것입니다.
예 : 여기
당신이 적용 할 수있는 간단한 예입니다. 나는이 클래스를 가지고 가정 :
public class Node {
public Node(String _SomeProperty) {
this.SomeProperty = _SomeProperty;
}
public String SomeProperty;
public List<Node> Children = new List<Node>();
}
각 Node
는 SomeProperty
라는 속성이 있습니다. 그것은 또한 아이들을 가질 수 있습니다. Children
속성의 Nodes
입니다. 여기
는 직렬화하는이 클래스에서 일부 데이터를 생성하는 콘솔 응용 프로그램에서
main
:
private static void RecursivelySerialize(ref XmlWriter writer, Node sc) {
writer.WriteStartElement("Node");
writer.WriteElementString("SomeProperty", sc.SomeProperty);
if (sc.Children.Count > 0) {
writer.WriteStartElement("Nodes");
foreach (Node scChild in sc.Children)
RecursivelySerialize(ref writer, scChild);
writer.WriteEndElement();
}
writer.WriteEndElement();
}
: 그것은 그 실제 작업을 수행 RecursivelySerialize
라는 방법, 호출
static void Main(string[] args) {
// Make some data for testing
Node baseObject = new Node("This is the base class");
List<Node> Children = new List<Node>(){
new Node("This is a child"),
new Node("This is another child")
};
baseObject.Children = Children;
Node aSubChild = new Node("This is a child of a child");
baseObject.Children[0].Children = new List<Node>() { aSubChild };
// Serialize
XmlWriter writer = XmlWriter.Create("test.xml");
writer.WriteStartDocument();
RecursivelySerialize(ref writer, baseObject);
writer.Flush();
}
이 방법은 복잡하지 않습니다. 이를 개선하기 위해 Reflection을 사용하여 모든 유형의 클래스를 동적으로 직렬화 할 수 있습니다.위의 코드를 실행하는 경우 여기에 내가 가진 출력 (잘 포맷)되어
<?xml version="1.0" encoding="utf-8"?>
<Node>
<SomeProperty>This is the base class</SomeProperty>
<Nodes>
<Node>
<SomeProperty>This is a child</SomeProperty>
<Nodes>
<Node>
<SomeProperty>This is a child of a child</SomeProperty>
</Node>
</Nodes>
</Node>
<Node>
<SomeProperty>This is another child</SomeProperty>
</Node>
</Nodes>
</Node>
@SimpleCoder, 사용자 정의 시리얼 라이저의 간단한 예를 들려 줄 수 있습니까? –
@ Justin : 물론, 잠깐만 ... –
@SimpleCoder Thanks! –