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

标签 c# .net xsd

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

我需要做两件事:

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

我无法通过项目 1 :(

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

然后我使用反射加载使用 DataSet.ReadXmlSchema(ContactXsdStream) 的 XSD,但是此 XSD 引用在 BaseTypes.xsd 中指定的类型,它会抛出错误“未定义的复杂类型‘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 和其他数据源。如果更合适,我将使用其他同步框架,欢迎任何其他建议。

亲切的问候 硅

最佳答案

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

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

关于c# - 使用在 C# .net 4 中的多个 XSD 文件中定义的复杂类型从 XSD 创建数据表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6753864/

相关文章:

c# - Rolemanager 在 Identity 2.0 中始终为 null

c# - 计算上传传输速度问题

.net - 可以通过ClickOnce将.NET 4客户端配置文件部署给非管理员吗?

c# - 使用接口(interface)有什么好处?

xml - 如何在不让收件人更改他/她的模式的情况下向 XML 文档添加字段

xml - 具有多个可选子元素和公共(public)必需元素的 xsd

ruby-on-rails - XML Schema (XSD) 到 Rails ActiveRecord 映射?

c# - 在数据库中更新抛出 SqlException

c# - 如何使用 Entity Framework 自动包含所有底层导航属性

c# - 返回实现通用接口(interface)的类的类型