在c# .net 4中,使用在多个XSD文件中定义的复杂类型从XSD创建数据表

本文关键字:XSD 定义 复杂 类型 数据表 创建 文件 net | 更新日期: 2023-09-27 18:02:45

我有一堆XSD的https://github.com/XeroAPI/XeroAPI-Schemas/tree/master/v2.00

我需要做两件事:

  1. 为每种类型创建表,我的第一个表是Contact.xsd中的Contact.
  2. 当表被填充时,我需要从表中获取XML,以便它可以作为REST请求发送。

我无法通过第1项:(

我已经将所有这些XSD标记为我的。net c#项目中的嵌入式资源

我然后使用反射使用DataSet.ReadXmlSchema(ContactXsdStream)加载XSD,但这个XSD引用BaseTypes中指定的类型。xsd会抛出一个错误"Undefined complexType 'DataContractBase'被用作复杂类型扩展的基础"。

var assembly = Assembly.GetExecutingAssembly();
var dataset = new DataSet();
var manifestResourceStream = assembly.GetManifestResourceStream(schemaName);
if (manifestResourceStream == null)
  throw new FileNotFoundException(string.Format("Unable to find schema resource {0}", schemaName));
using (var textStreamReader = new StreamReader(manifestResourceStream))
{
  dataset.ReadXmlSchema(textStreamReader);
  textStreamReader.Close();
}
return dataset;

感谢所有的帮助

我理解没有联系复杂类型不直接映射为单个表,但是我可能需要在数据表中嵌入复杂类型,如地址作为XML字符串。

我需要简单类型的原因是数据表被传递到数据同步API (Simego DataSync Studio)。这个同步工具允许我双向同步到CRM, SharePoint, Excel和其他数据源。我将使用其他同步框架,如果更合适,欢迎任何其他建议。

亲切的问候如果

在c# .net 4中,使用在多个XSD文件中定义的复杂类型从XSD创建数据表

当您的Xsd包含其他Xsd文件时,这些文件必须存在于磁盘上的适当位置。

即使从资源中获取主xsd并将其作为流或简单字符串传递给ReadXmlSchema,所包含的模式也必须作为文件存在于相对于当前工作目录的指定位置。