1

我们将一个对象序列化为 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>

双重属性没有序列化有什么原因吗?

4

1 回答 1

4

要定义序列化的精确程度,您应该手动进行。

[XmlIgnore]
public double Price { get;set; }

[XmlElement("Price")]
public string PriceString {
    get {return Price.ToString();}
    set {Price = double.Parse(value);}
}

来自http://bytes.com/topic/c-sharp/answers/768555-serializable-double-precision

于 2012-10-10T07:51:01.670 回答