12

助けてください。サーバーからのデータをデシリアライズ中にエラーが発生しました。

名前空間 '' の最上位の XML 要素 'Name' は、個別の型 Object1.LocalStrings および System.String を参照しています。XML 属性を使用して、要素または型の別の XML 名または名前空間を指定します。

プロパティ Name と を含むクラス ObjectType がありますList<SupportedIp>。SupportedIp クラスにはプロパティ Name も含まれています。以下の私のコードを参照してください:

[XmlRootAttribute("SupportedIp", Namespace = "http://test.com/2010/test", IsNullable = false)]
public partial class SupportedIp
{[XmlElementAttribute(Namespace = "")]
    public string Name
    {
        get;
        set;
    } .... }


[GeneratedCodeAttribute("xsd", "2.0.50727.1432")]
[SerializableAttribute()]
[DebuggerStepThroughAttribute()]
[DesignerCategoryAttribute("code")]
[XmlTypeAttribute(Namespace = "http://test.com/2010/test")]
[XmlRootAttribute("ObjectType", Namespace = "http://test.com/2010/test", IsNullable = false)]
public partial class ObjectType
{

    /// <remarks/>
    [XmlElementAttribute(ElementName = "", Namespace = "")]
    public LocalStrings Name
    {
        get;
        set;
    }

    /// <remarks/>
    [XmlArrayAttribute(ElementName = "Supportedip", Namespace = "")]
    [XmlArrayItemAttribute(IsNullable = false, Namespace = "")]
    public List<Supportedip> Supportedip
    {
        get;
        set;
    }
}

アプリケーションがXmlSerializer部分に到達すると、エラーが表示されます。多少関連する投稿を見たことがありますが、具体的な答えはありません。

4

3 に答える 3

17

(namespace="", name="Name")あなたが書いたことから、xml では違法な 2 つの異なるタイプのコンテンツ (string タイプと localstrings タイプ) を持つ同じ要素名を持っていることが問題だと思います。これは、すべての xml パーサーが出力した致命的なエラーを発生させる必要があることを意味します。解決策は、要素の名前を変更するか、同じ名前を使用してそれらを異なる名前空間に関連付けることです。たとえば、次の代わりに:

[XmlElementAttribute(Namespace = "")]

あなたが置くことができます:

[XmlElementAttribute(Namespace = "http://test.com/2010/test")]

核となる問題は、XMLSerializer が XSD スキーマ検証を使用していることにあるようです。つまり、定義した各 XmlElementAttribute にはタイプがアタッチされています (詳細はこちらを参照してください)。XSD 制約の 1 つは "Element Declarations Consistent" 制約です。これは、同じ名前 (および名前空間) を持つ 2 つの要素は同じ型でなければならないことを意味します (詳細はこちらを参照)。

それが役に立てば幸い。

于 2012-05-15T14:36:28.377 に答える
0

メソッド ヘッダーで宣言する引数は、名前空間内のすべての Web メソッドに対して一意である必要があります。引数は、soap:body の最上位の xml タグです。幸運を。

于 2014-05-23T19:54:25.190 に答える