我有一个相当详细的 xml 文件。下面是顶级节点(我已经包括了椭圆,因为较低级别的节点都格式良好并正确填充了数据):
<?xml version="1.0" encoding="UTF-8"?>
<config>
<Models>...</Models>
<Data>...</Data>
</config>
我使用 Visual Studio 2008 命令提示符创建了一个 xsd 文件:
xsd sample.xml
这会生成 xsd 文件就好了。然后我使用以下命令从 xsd 自动生成类:
xsd sample.xsd /classes
为了将 xml 文件反序列化为类对象,我在帮助程序类中使用了 read 函数:
public class XmlSerializerHelper<T>
{
public Type _type;
public XmlSerializerHelper()
{
_type = typeof(T);
}
public void Save(string path, object obj)
{
using (TextWriter textWriter = new StreamWriter(path))
{
XmlSerializer serializer = new XmlSerializer(_type);
serializer.Serialize(textWriter, obj);
}
}
public T Read(string path)
{
T result;
using (TextReader textReader = new StreamReader(path))
{
XmlSerializer deserializer = new XmlSerializer(_type);
result = (T)deserializer.Deserialize(textReader);
}
return result;
}
}
尝试反序列化时:
var helper = new XmlSerializerHelper<configModels>();
var obj = new configModels();
obj = helper.Read(filepath);
我收到一个错误,我推断是因为反序列化器正在寻找“模型”节点,但相应的类名是作为根节点和“模型”节点 (configModels) 的组合生成的。为什么类名会这样生成?
我尝试使用以下方法从顶部节点反序列化:
var helper = new XmlSerializerHelper<config>();
var obj = new config();
obj = helper.Read(filepath);
不幸的是,这会导致一系列错误,如下所示:
System.InvalidOperationException was unhandled by user code
Message="Unable to generate a temporary class (result=1).
error CS0030: Cannot convert type 'Application.Lease[]' to 'Application.Lease'
error CS0030: Cannot convert type 'Application.CashFlow[]' to 'Application.CashFlow'
...ect.
有人可以引导我解决我的 xsd 自动生成可能做错的事情吗?