3

xsd.exe ツールを使用してスキーマからクラスを生成しました

xmlns=""クラスをシリアル化すると、ルートの下のすべてに余分なものが得られます。

<myroot xmlns="blabla">
    <tag1 xmlns="">
        <tag2>
            ...

スキーマは次のようになります。

<xsd:schema xmlns="blabla" targetNamespace="blabla" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:element name="MyRoot">

tag1 要素以下がルート以外の別の名前空間にある必要があることを示すスキーマが見つかりません。

シリアル化コードは次のことを行います。

MyRoot doc = new MyRoot();
...
XmlSerializer xs = new XmlSerializer(typeof(MyRoot));
MemoryStream ms = new MemoryStream();
try {
    xs.Serialize(ms, doc);

xsd.exe から生成されたクラスには、ルート クラスの名前空間属性のみが含まれます。

4

1 に答える 1

1

ここで行っているのは"blabla"、親要素の名前空間を特定の名前空間でオーバーライドすること""です。

ここで実行している理由tag1は、空の名前空間セットがあり (または空の名前空間があると暗黙的に推測し)、それmyrootが名前空間を持っているため"blabla"です。

tag1解決策は、 が と同じ名前空間を持っていることを確認することです"blabla"

名前空間を何度も提供しなければならないことを意味するので、これは非常にイライラしますが、それがどのように機能するかです。

于 2010-11-10T16:38:55.373 に答える