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 コンテキストで実行され、.net ライブラリは C++ ライブラリ内から呼び出されます):

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>

double プロパティがシリアル化されない理由はありますか?

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 に答える