XMLシリアライザーで奇妙な動作をします。
XMLを読み取り、それをオブジェクトに逆シリアル化した後、すべてのプロパティは、xmlファイルで宣言された値ではなく、デフォルト値に設定されます。
シリアライザーは例外をスローせず、正しく実行されます。xmlファイルは適切に形成され、クラス構造に適合します。
それがどのようになり得るのか、またはどうすれば問題の原因にたどり着くことができるのか、誰か考えていますか?
ありがとうございました
編集:私はあなたに全体の話をしませんでした。問題は、私が取得するXMLは別のコンポーネントからのものです。XMLファイルを逆シリアル化できたので、別の形式になりました。ファイルには約3000行あるため、コード全体を投稿することはできません。しかし、違いは次のとおりです。
逆シリアル化可能:
<?xml version="1.0" encoding="utf-8"?>
<rootElem xmlns:cfg="namespace1" xmlns:office="namespace2" xmlns="namespace3">
<Prop1 xmlns="">6</Prop1>
<Prop2 xmlns="">string</Prop2>
</rootElem>
逆シリアル化できません
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<rootElem xmlns:cfg="namespace1" xmlns:office="namespace2" xmlns="namespace3">
<Prop1>6</Prop1>
<Prop2>string</Prop2>
</rootElem>
各要素内のxmlnsタグが原因で最初の例をアンマーシャリングできる理由と、2番目の例をアンマーシャリングできない理由がよくわかりません...
edit2:トップレベルの要素だけがこれらの奇妙なxmlns=""属性を持っていることに気づきました。しかし、C#クラス宣言は他のすべてのクラスと同じです...それは奇妙です。
C#クラスは次のようなものです。
using namespace1;
namespace namespace3
{
[System.SerializableAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="namespace3")]
[System.Xml.Serialization.XmlRootAttribute(Namespace="namespace3", IsNullable=true)]
public partial class rootElem: BaseObject
{
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
public int Prop1
{
//...
}
}
}