Xsdを使用してシリアル化されたWCFプロキシクラスを検証しようとしています。
生成されたXmlには、親要素の名前空間が含まれていませんが、子要素には名前空間が含まれていることに気付きました。これは、検証スローが要素タイプエラーのスキーマ情報を見つけることができなかったことを意味します。
デフォルトの名前空間を手動で追加すると、スキーマ検証が機能します。
私の質問は、リクエストオブジェクトに名前空間のシリアル化属性がある場合、それが自動的に生成されないのはなぜですか?
これは、プロキシ用にシリアル化されたXmlを生成する方法です。
var path = @"C:\DataRequest.xml";
var data = new DataRequest();
using (var fileWriter = new StreamWriter(path))
{
var serializer = new XmlSerializer(data.GetType());
serializer.Serialize(fileWriter, data);
fileWriter.Close();
}
これにより、次のDataRequest.xmlが生成されます。
<DataRequest>
<Data xmlns="urn:some:name:space">
<Id>1</Id>
</Data>
</DataRequest>
名前空間のシリアル化属性を持つリクエストオブジェクトは次のとおりです。
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.17929")]
<other attributes I snipped>
[System.Xml.Serialization.XmlTypeAttribute(Namespace="urn:some:name:space")]
public partial class DataRequest : object, System.ComponentModel.INotifyPropertyChanged {