首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用XSD.exe生成XSD

使用XSD.exe生成XSD
EN

Stack Overflow用户
提问于 2010-02-02 23:26:04
回答 2查看 2.6K关注 0票数 0

我正在使用AMO in c#构建SSAS多维数据集。为此,我希望获得Server、Cube、Dimension等类的公共属性列表。这将是我的超集,用户必须从其中提供强制属性,也可以提供可选属性。

我正在尝试生成XSD模式。我运行了以下命令

XSD C:\windows\assembly\GAC_MSIL\Microsoft.AnalysisServices\10.0.0.0__89845dcd8080cc91\Microsoft.AnalysisServices.DLL /dataset /element:Cube /out:c:\temp\gac

并得到了这个错误

代码语言:javascript
复制
Error: There was an error processing 'C:\windows\assembly\GAC_MSIL\Microsoft.AnalysisServices\10.0.0.0__89845dcd8080cc91\Microsoft.AnalysisServices.DLL'.
  - There was an error reflecting type 'Microsoft.AnalysisServices.ModelComponent'.
  - Cannot serialize member 'System.ComponentModel.Component.Site' of type 'System.ComponentModel.ISite', see inner exception for more details.
  - Cannot serialize member System.ComponentModel.Component.Site of type System.ComponentModel.ISite because it is an interface.

我该怎么做才能正确地生成模式?

EN

回答 2

Stack Overflow用户

发布于 2014-07-18 01:37:24

解决方案是指示XSD.exe跳过对有问题的成员的序列化(在本例中为‘System.ComponentModel.Component.Site’)。为此,在产生问题的类成员之前添加以下属性:

代码语言:javascript
复制
[System.Xml.Serialization.XmlIgnore]
票数 2
EN

Stack Overflow用户

发布于 2010-02-16 01:35:22

当我读到这个问题时,有几件事我想知道:

  • 为什么要有/dataset选项。这只在将XSD转换成代码时才有用。您似乎正在将(编译的)代码转换为XSD。(dataset与generation)
  • Why的DTOc类有一个/element选项。这只在将XSD转换为代码(子选择要为其生成代码的元素,而不是源架构中的所有元素)

时才有用

然后,问题出现的原因是这个库包含类型,这些类型具有带有接口类型的公共字段/属性(在本例中为ISite)。

XmlSerializer无法序列化接口,它需要具体的类型。因此,你得到了失败。

目标很明确,但我担心您将无法使用XSD.exe工具。由于您所需的一个对象(多维数据集)具有类型为ISite的公共属性,因此这将始终破坏XMLSerializer。

我猜你最好的选择是AnalysisServices SDK (也许他们给你提供了这个对象模型)或者...(讨厌)在你想要生成的类型上使用反射,而属性字段的子集忽略了任何接口类型。

希望这能帮上忙

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2185165

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档