C# 双重属性将不会序列化为XML
我们将对象序列化为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
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在序列化引擎中失败。我很想知道这种奇怪行为的原因。