シリアル化および逆シリアル化するオブジェクトがあります。オブジェクトをシリアル化する際に、クラス定義に属性として存在しない名前空間を動的に追加します。ここで問題を繰り返すために小さな例を作成しました:
Person というクラスがあります。
[XmlRoot("person")]
public class Person
{
[XmlIgnore]
public DateTime? dob { get; set; }
[XmlAttribute("dobs")]
public DateTime dobser { get{return dob.Value;} set{dob=value;} }
public bool ShouldSerializedobser()
{
return dob.HasValue;
}
[XmlAttribute("name")]
public string Name { get; set; }
public bool ShouldSerializeName()
{
return !string.IsNullOrWhiteSpace(Name);
}
public int? Age { get; set; }
}
そしてここでコードはシリアライズとデシリアライズを行います
public class Program
{
static void Main(string[] args)
{
var person = new Person();
person.Age = 12;
StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
//add namespace
XmlSerializerNamespaces namespaces = new XmlSerializerNamespaces();
namespaces.Add("ns1", "http://www.microsoft.com/schema/ml/v1");
XmlSerializer xs = new XmlSerializer(typeof(Person));
xs.Serialize(sw, person,namespaces);
// try to deserialize, it fails. It is working If I don't add namespace
xs.Deserialize(GenerateStreamFromString(sb.ToString()));
Console.WriteLine(sb.ToString());
Console.Read();
}
}
どんな助けでも大歓迎です