XmlSerializerクラスを使用して、 XmlElementおよびXmlRoot属性の名前空間を指定します。
using System.Xml.Serialization;
...
// TODO: Move the namespace name to a const variable
[XmlRoot(ElementName = "Person", Namespace = "http://api.google.com/staticInfo/")]
public class Person
{
[XmlElement(ElementName="Id", Namespace="http://api.google.com/staticInfo/")]
public int ID { get; set; }
[XmlElement(ElementName = "age", Namespace = "http://api.google.com/staticInfo/")]
public int Age { get; set; }
}
...
string input =
@"<g1:Person xmlns:g1=""http://api.google.com/staticInfo/"">
<g1:Id>005008</g1:Id>
<g1:age>23</g1:age>
</g1:Person>";
XmlSerializer xmlSerializer = new XmlSerializer(typeof(Person));
Person person = (Person)xmlSerializer.Deserialize(new StringReader(input));
または、XmlSerializer のコンストラクターで既定の名前空間を指定し、Namespace プロパティを未指定のままにすることもできます。
XmlSerializer xmlSerializer = new XmlSerializer(typeof(Person),
"http://api.google.com/staticInfo/");
名前空間のプレフィックスが "q1" であることを確認するには、使用するXmlSerializerNamespacesを指定します。例えば:
Person person; // Assuming it is populated as above
using(MemoryStream memoryStream = new MemoryStream())
{
xmlSerializer.Serialize(memoryStream, person,
new XmlSerializerNamespaces(new [] { new XmlQualifiedName("q1", "http://api.google.com/staticInfo/") }));
memoryStream.Flush();
Console.Out.WriteLine(Encoding.UTF8.GetChars(memoryStream.GetBuffer()));
}
それが示している:
<?xml version="1.0"?>
<q1:Person xmlns:q1="http://api.google.com/staticInfo/">
<q1:Id>5008</q1:Id>
<q1:age>23</q1:age>
</q1:Person>