【发布时间】:2016-09-22 13:49:27
【问题描述】:
我需要完成非常简单的任务:序列化和反序列化对象层次结构。
我尝试过XMLSerializer、DataContractSerializer、NetDataContractSerializer,但似乎没有任何效果,总是有一些问题。
XMLSerializer 不好,因为它要求所有属性都是公开的。
(Net)DataContractSerializer(s) 不好,因为它总是缺少一些元数据——但是当用户创建 XML 时没有元数据。
那么你将如何解决这个任务?考虑类:
class A {
private B instanceB;
private int integerValue;
... getters/setters
}
class B {
private List<C> cInstanceList;
private string stringValue;
... getters/setters
}
class C {
... some other properties
... getters/setters
}
和用户输入:
<A>
<B>
<cInstanceList>
<C>
<someproperties>val</someproperties>
</C>
<C>
<someproperties>differentVal</someproperties>
</C>
</cInstanceList>
<strigValue>lalala<stirngValue>
</B>
<integerValue>42</integerValue>
</A>
DataContractors 缺少的是“类型”或“命名空间”等元数据。XStream 不需要。我知道反序列化对象的类型,所以我需要编写函数:
public T Deserialize<T>(string xml);
我想要的用例:
var myDeserializedObject = Deserialize<A>(inputString);
我做错了什么?你会以不同的方式解决它吗?
【问题讨论】:
-
哦,我忘了你不要在 C# 中使用 GETTER 和 SETTERS 你使用属性!!
标签: java c# xml serialization xstream