名前空間が指定されているときにXMLをジェネリックコレクションにシリアル化する方法

StackOverflow https://stackoverflow.com/questions/825423

質問

次のXMLファイルがあるとしましょう:

<?xml version="1.0" encoding="utf-8"?>
<Customers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Customer.xsd">
    <Customer>
        <FirstName></FirstName>
        <LastName></LastName>
    </Customer>
    <Customer>
        <FirstName></FirstName>
        <LastName></LastName>
    </Customer>
    <Customer>
        <FirstName></FirstName>
        <LastName></LastName>
    </Customer>
</Customer>

適切なフィールドにマップするCustomerオブジェクトも作成しました。

次のようにこれを汎用リストにシリアル化しようとすると:

XmlSerializer xml = new XmlSerializer(typeof(List<Customer>));

リストはXMLドキュメント内の顧客と同じネームスペースにマップされておらず、カスタムではなく汎用リストを使用しているため、属性として追加できないため、例外が発生しますコレクション

カスタムコレクションを作成せずに、名前空間をリストに一致させるようにシリアライザーに指示するにはどうすればよいですか?

編集: 少し詳しく説明する必要があります。シリアライザーによってスローされる例外は次のとおりです。

(Customers xmlns = '' <!> gt;は予期されていませんでした。

List(T)を親ノードとして使用しているため、汎用リストをXMLドキュメントで指定された名前空間に一致させるにはどうすればよいですか?

役に立ちましたか?

解決

エラーは<!> lt; Customers <!> gt;と関係があると思います。ノードはxmlnsではありません。

試用

XmlRootAttribute xr = new XmlRootAttribute("Customers");
XmlSerializer xs = new XmlSerializer(typeof(List<Customer>), xr); 

デフォルトでは、<!> lt; ArrayOfCustomer <!> gt;が期待されます。ノード

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top