使用XSD.exe生成XSD

时间:2010-02-02 15:26:04

标签: c# xml xsd xsd.exe

我正在使用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

并收到此错误

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.

我该怎么做才能正确生成架构?

2 个答案:

答案 0 :(得分:2)

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

[System.Xml.Serialization.XmlIgnore]

答案 1 :(得分:1)

在阅读这个问题时我想知道一些事情:

  • 为什么有/ dataset选项。这仅在将XSD转换为代码时有用。你好像在(编译)代码进入XSD。 (数据集与DTOc类生成)
  • 为什么有/ element选项。这仅在将XSD转换为代码时有用(Sub选择元素以生成代码,而不是源代码模式中的所有元素)

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

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

目标很明确,但我担心你将无法使用XSD.exe工具。由于您的一个必需对象(Cube)具有ISite类型的公共属性,因此它将始终破坏XMLSerializer。

我猜你最好的选择是AnalysisServices SDK(可能是他们为你提供这个对象模型)或者...(ouch)自己使用反射你希望用属性的子集生成的类型 - 字段留下任何界面类型。

希望这有帮助,