我有这样的事情(对不好的名字感到抱歉)
<?xml version="1.0" encoding="utf-8" ?>
<root xmlns="http://www.domain.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.domain.com Schema.xsd">
<product></product>
<SomeHighLevelElement>
<anotherElment>
<lowestElement> </lowestElement>
</anotherElment>
</SomeHighLevelElement>
</root>
我的班级有类似的东西
public class MyClass
{
public MyClass()
{
ListWrapper= new List<UserInfo>();
}
public string product{ get; set; }
public List<SomeHighLevelElement> ListWrapper{ get; set; }
}
public class SomeHighLevelElement
{
public string lowestElement{ get; set; }
}
但是我不知道如何编写“anotherElement”的代码,不知道我是否必须围绕它编写另一个包装。
修改
我知道在我的实际xml文件中出错。我的标签中有这个
xmlns="http://www.domain.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.Domain.com Schema.xsd
在根行上引发异常,说这个东西有错误。所以我不知道它是否对schemaLocation感到生气,因为我现在正在使用本地主机或者是什么。
错误
System.InvalidOperationException was caught
Message="There is an error in XML document (2, 2)."
Source="System.Xml"
答案 0 :(得分:2)
以下是基于您提供的信息的简单示例。基本上,您需要为anotherElment
创建一个单独的类,其中包含string
。
您可以使用attributes精确控制类如何解析Xml元素,这基本上将您的类属性映射到Xml文件中的元素/属性。例如,由于您提供的示例Xml中的文档元素是root
,因此我明确定义MyClass
有一个名为root
的文档元素以匹配您的Xml。默认情况下,序列化程序将查找名为MyClass
的元素,如果省略它,则会抛出deserialize方法。
这应该有助于您前进:
using System;
using System.Collections.Generic;
using System.Xml;
using System.Xml.Serialization;
[XmlRoot("root")]
public class MyClass
{
public MyClass()
{
}
public string product { get; set; }
[XmlElement("SomeHighLevelElement")]
public List<SomeHighLevelElement> ListWrapper { get; set; }
}
public class SomeHighLevelElement
{
public AnotherElment anotherElment { get; set; }
}
public class AnotherElment
{
public string lowestElement { get; set; }
}
基于您提供的Xml的示例测试方法:
using System.Xml;
using System.Xml.Serialization;
using System.IO;
.
.
.
public void Test()
{
string xml = @"<root>
<product>product name</product>
<SomeHighLevelElement>
<anotherElment>
<lowestElement>foo</lowestElement>
</anotherElment>
</SomeHighLevelElement>
<SomeHighLevelElement>
<anotherElment>
<lowestElement>bar</lowestElement>
</anotherElment>
</SomeHighLevelElement>
<SomeHighLevelElement>
<anotherElment>
<lowestElement>baz</lowestElement>
</anotherElment>
</SomeHighLevelElement>
</root>";
MyClass c = Deserialize<MyClass>(xml);
}
public T Deserialize<T>(string xml)
{
XmlSerializer serializer = new XmlSerializer(typeof(T));
return (T)serializer.Deserialize(new StringReader(xml));
}