我有一堆来自 https://github.com/XeroAPI/XeroAPI-Schemas/tree/master/v2.00 的 XSD
我需要做两件事:
- 为每种类型创建表,我的第一个表是 Contact.xsd 中的 Contact。
- 填充表后,我需要从表中取回 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/