Xsd2Code和xmldsig

时间:2012-08-10 07:06:14

标签: c# xsd xsd2code xml-dsig

我在使用Xsd2Code从xsd生成代码时遇到问题。 xsd看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:ns1="urn:oasis:names:specification:ubl:schema:xsd:CountryIdentificationCode-1.0"
           xmlns:ns2="urn:oasis:names:specification:ubl:schema:xsd:LocationIdentificationCode-1.0"
           xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
           elementFormDefault="qualified"
           attributeFormDefault="unqualified">

  <xs:import namespace="http://www.w3.org/2000/09/xmldsig#" schemaLocation="xmldsig.xsd" />

  .......

</xs:schema>

我尝试序列化生成的类的实例时出现的错误:

"Cannot serialize object of type 'MyXSD.SignatureValueType'. 
 Consider changing type of XmlText member 'MyXSD.SignatureValueType.Value' from System.Byte[] to string or string array."

错误发生在这里:

[System.Xml.Serialization.XmlTextAttribute(DataType = "base64Binary")]
public byte[] Value
{
    get
    {
        return this.valueField;
    }
    set
    {
        this.valueField = value;
    }
}

如果我将该属性更改为:

,则为事件
[System.Xml.Serialization.XmlElementAttribute(DataType="base64Binary")]

..我收到其他错误:

Type of choice identifier 'ItemsElementName' is inconsistent with type of 'Items'.
Please use array of System.Collections.Generic.List`1[[MyXSD.ItemsChoiceType2, MyAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]].

是否有人成功将Xsd2Code与xmldsig一起使用?如果可能的话,我宁愿用Xsd2Code生成器解决这个问题,而不是手动解决。还有其他选择吗?

3 个答案:

答案 0 :(得分:0)

您是否尝试过仅使用xsd.exe? (http://msdn.microsoft.com/fr-fr/library/x6c1kb0s%28v=vs.80%29.aspx)

您可以使用失败的xsd代码部分更新您的问题吗?

答案 1 :(得分:0)

问题是文件顶部的DOCTYPE定义。

<!DOCTYPE schema
 [
   <!ATTLIST schema 
     xmlns:ds CDATA #FIXED "http://www.w3.org/2000/09/xmldsig#">
   <!ENTITY dsig 'http://www.w3.org/2000/09/xmldsig#'>
   <!ENTITY % p ''>
   <!ENTITY % s ''>
  ]>

对此进行评论,代码生成将起作用。此问题已于2009年向xsd2code报告:https://xsd2code.codeplex.com/discussions/45133。它似乎仍然是一个尚未解决的问题。

答案 2 :(得分:0)

在Xsd2Code选项中,设置选项&#39; CollectionObjectType&#39;作为&#39;阵列&#39;而不是&#39; List&#39;。