所以我有xml看起来像这样:
#{id}
#{name}
#{description}
#{project_id}
#{milestone_id}
#{position}
#{private}
#{tracked}
...
...
...
我将如何使用.NET的序列化库将其反序列化为C#对象?
目前我正在使用反射,我使用命名约定在xml和我的对象之间进行映射.
为每个元素创建一个类,每个元素具有每个元素的属性,并为每个子元素创建一个List或Array对象(使用创建的对象).然后对字符串调用System.Xml.Serialization.XmlSerializer.Deserialize并将结果转换为对象.使用System.Xml.Serialization属性进行调整,例如将元素映射到ToDoList类,使用XmlElement("todo-list")属性.
shourtcut是将XML加载到Visual Studio中,单击"推断架构"按钮并运行"xsd.exe/c schema.xsd"以生成类.xsd.exe位于tools文件夹中.然后浏览生成的代码并进行调整,例如在适当的地方将短路更改为整数.
归结为使用VS中的工具中的xsd.exe:
xsd.exe "%xsdFile%" /c /out:"%outDirectory%" /l:"%language%"
然后用读取器和反序列化器加载它:
public GeneratedClassFromXSD GetObjectFromXML() { var settings = new XmlReaderSettings(); var obj = new GeneratedClassFromXSD(); var reader = XmlReader.Create(urlToService, settings); var serializer = new System.Xml.Serialization.XmlSerializer(typeof(GeneratedClassFromXSD)); obj = (GeneratedClassFromXSD)serializer.Deserialize(reader); reader.Close(); return obj; }
反序列化任何对象,只要该类型T
标记为Serializable:
function T Deserialize(string serializedResults) { var serializer = new XmlSerializer(typeof(T)); using (var stringReader = new StringReader(serializedResults)) return (T)serializer.Deserialize(stringReader); }