次のコードがあるとします。
using System;
using System.Xml.Schema;
using System.Xml.Serialization;
namespace XmlSerializationTest
{
[XmlType(Namespace = "http://www.test.com")]
public class Element
{
[XmlElement]
public int X;
}
[XmlRoot(Namespace = "http://www.test.com")]
public class Root
{
[XmlElement(Form = XmlSchemaForm.Unqualified)]
public Element Element;
}
public static class Program
{
public static void Main(string[] args)
{
var root = new Root { Element = new Element { X = 1 } };
var xmlSerializer = new XmlSerializer(typeof(Root));
xmlSerializer.Serialize(Console.Out, root);
}
}
}
出力は次のとおりです。
<?xml version="1.0" encoding="ibm852"?>
<Root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.test.com">
<Element xmlns="">
<X xmlns="http://www.test.com">1</X>
</Element>
</Root>
問題は、フォーム プロパティを設定すると、ルート要素と同じ名前空間を持つ属性がある場合でもXmlSchemaForm.Unqualified
、Element
要素の名前空間が に設定されるのはなぜですか?""
XmlTypeAttribute
この種のコード (XmlSchemaForm.Unqualified
部分) はWSCF.blue
ツールによって生成され、名前空間を台無しにしています。