gpt4 book ai didi

c# - 将 XML 反序列化为 XSD 生成的类时出现问题

转载 作者:可可西里 更新时间:2023-11-01 08:18:38 24 4
gpt4 key购买 nike

我有一个相当详细的 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 文件反序列化为类对象,我使用了辅助类中的读取函数:

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 自动生成可能做错的地方吗?

最佳答案

XSD.EXE 是一个好的开始 - 但它远非完美。此外,根据您提供的 XML,XSD.EXE 无法始终确定某物是对象的单个实例还是对象的开放式数组。

这似乎是您的两个元素的情况 - Application.LeaseApplication.CashFlow。它们在生成的 XSD 文件中是如何定义的?这对你有意义吗?很可能,您必须添加一些提示,例如:

<xs:element name="Lease" minOccurs="0" maxOccurs="1" />

对于可选属性,仅出现零次或一次。 xsd.exe 工具很难仅基于单个 XML 示例文件来解决此类问题。

马克

关于c# - 将 XML 反序列化为 XSD 生成的类时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1419316/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com