C# 双重属性将不会序列化为XML

C# 双重属性将不会序列化为XML,c#,.net,xml,xml-serialization,double,C#,.net,Xml,Xml Serialization,Double,我们将对象序列化为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 (va

我们将对象序列化为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()));
        }
    }
}
字符串、bool、long、int、ushort等类型的所有属性都是序列化的,双属性除外。一旦它们手动转换为其他内容(而不是双精度),它们将被序列化

Xml如下所示:

<Root>
  <Test>
    <Name>xxx</Name>
  </Test>
</Root>

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

要定义要序列化它的精度,应该手动进行

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

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

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

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

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

中,您如何知道double不是序列化的?你能提供输出吗?当我运行此代码时,除了在变量中捕获返回的XElement,因为我没有rootElement,该元素同时包含名称和TestScore。是的,这也是我所期望的,不幸的是在我们的set项目中,platform等double属性没有序列化。你需要对此进行调试。我们知道,如果我们将上述所有代码放在一个新的项目中,它将按预期工作。这样做,然后开始添加实际解决方案的更多方面,直到它崩溃。这就是您正试图使用的类,还是您有派生类型、显式接口实现a.s.o。?特别是显式接口实现不是公共的,因此不能序列化。您如何知道double不是序列化的?你能提供输出吗?当我运行此代码时,除了在变量中捕获返回的XElement,因为我没有rootElement,该元素同时包含名称和TestScore。是的,这也是我所期望的,不幸的是在我们的set项目中,platform等double属性没有序列化。你需要对此进行调试。我们知道,如果我们将上述所有代码放在一个新的项目中,它将按预期工作。这样做,然后开始添加实际解决方案的更多方面,直到它崩溃。这就是您正试图使用的类,还是您有派生类型、显式接口实现a.s.o。?特别是显式接口实现是不公开的,因此无法序列化。谢谢,我们也尝试过这个方法,它可以工作,作为临时解决方法,我们正在手动序列化对象。问题不是我们没有得到正确的精度,而是我们根本没有得到属性,可能ToString在序列化引擎中失败。我非常想知道这种奇怪行为的原因。谢谢,我们也尝试过这种方法,它也可以工作,作为一种临时解决方法,我们正在手动序列化对象。问题不是我们没有得到正确的精度,而是我们根本没有得到属性,可能ToString在序列化引擎中失败。我很想知道这种奇怪行为的原因。