我们将一个对象序列化为 xml:
public class Test: INotifyPropertyChanged
{
public virtual string Name {get; set;}
public virtual double TestScore {get; set;}
}
使用以下方法:
public static XElement ToXElement<T>(this object obj)
{
using (var memoryStream = new MemoryStream())
{
using (TextWriter streamWriter = new StreamWriter(memoryStream))
{
var xmlSerializer = new XmlSerializer(typeof(T));
xmlSerializer.Serialize(streamWriter, obj);
return XElement.Parse(Encoding.UTF8.GetString(memoryStream.ToArray()));
}
}
}
在以下上下文中(代码在 x64 上下文中运行,从 C++ 库中调用 .net 库):
XDocument rootElement = ...
Test test = new Test();
test.Name = "xxx";
test.TestScore= 1.0d;
rootElement.Add(test.ToXElement());
所有类型的属性(string、bool、long、int、ushort 等)都被序列化,除了 double 属性。一旦它们手动转换为其他东西(不是双重),它们就会被序列化。
XML 看起来像这样:
<Root>
<Test>
<Name>xxx</Name>
</Test>
</Root>
双重属性没有序列化有什么原因吗?