.NET XmlSerializer
を使用して、C#WindowsフォームアプリケーションでオブジェクトをXMLドキュメントにシリアル化しています。 (xsd.exe
によって作成された部分クラスに参加するには)、私はxsi:noNamespaceSchemaLocation
属性を追加するには、次のプロパティを追加したxmlns:xsd属性を削除する方法xmlns:xsiを維持する
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="file:///C:/data//MySchema.xsd">
<!-- ... -->
</root>
:
ルート要素は、のように見える終わる必要があります。
[XmlAttribute("noNamespaceSchemaLocation", Namespace = XmlSchema.InstanceNamespace)]
public string xsiNoNamespaceSchemaLocation = @"file:///C://data//MySchema.xsd";
そして、他のすべての名前空間を削除しますが、私が使用している
xsi
1を維持する:
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("xsi", "http://www.w3.org/2001/XMLSchema-instance");
そしてはXmlSerializer.Serialize()
メソッドにns
を可決しました。
これまでのところ動作しますが、これが正しいかどうかはわかりません。それは私がデフォルトでそこにあるものを取り除いているように感じます、ただそれをもう一度追加してみてください...コードのにおいのようです。
xsd
を削除するだけの良い方法はありますか?デフォルトのxsi
のままにしておくと、もう一度追加する必要はありません。
注:この上の未回答の質問はhereが戻っていくつかの時間から既に存在し、それは両方xsd
とxsi
属性を削除すると、唯一の提案答えは似合いません。
あなたがしたことが私には正しいと思われます。内部を見れば、 'XmlSerializer'は何も指定されていなければ[DefaultNamespaces'](http://referencesource.microsoft.com/#System.Xml/System/Xml/Serialization/XmlSerializer.cs,34e80c7c306a0313)を使用しています。これがデフォルトで 'xsi'と' xsd'を見る理由です。 –
@CharlesMagerありがとう、私は名前空間の追加を調整することができたことを見てくれた: 'ns.Add(" xsi "、XmlSchema.InstanceNamespace);' – Toby
@CharlesMagerはあなたのコメントがFWIWあなたがそれを答えにしたいなら、私はそれを受け入れます。 – Toby