2017-01-10 9 views
0

複雑なオブジェクトを直列化および逆シリアル化するプロジェクトがあります。このオブジェクトグラフ内のいくつかのPointFオブジェクトを除いて、正常に動作します。私はこの点を持っていると言うことができます: X:109.33 Y:200PointFオブジェクトのシリアル化をカスタマイズする方法#

各点は必要に応じて(ブラジルの '、')小数点区切り記号でシリアル化されるので、109,33,200となります。問題点はまた、2つの値を区切るために「」文字を使用しているので、PointFのシリアライズは次のようになります。

pointProp="109,33,200" 

あなたはそこに問題を見ることができます。私が脱直列化すると、私はこの点を得るでしょう(X:109、Y:33)。

私は2つのソリューションについて考えていますが、どちらも実装する方法がわかりません。 「|」 まずように、異なるチャーにセパレータを変更することで、それは次のようにシリアル化されるであろう: pointProp =「109,33 | 200」

第二の溶液は、ドットを使用するシリアル化を強制することであろう( '。')を小数点の区切り記号として使用します。そのために私の代わりにBrの文化のアメリカ文化を考慮する力のシリアライゼーションを持つことになり、それがそのようにシリアライズされます:

pointProp="109.33,200" 

ことのいずれかを達成する方法上の任意のヒント?


申し訳ありませんが、質問を無視して、ちょうど私の問題が異なることを認識しました。 My Containerオブジェクトは、実際にはPointFプロパティにXMlIgnoreを持ち、独自のシリアル化を行います。この場合、このメソッドを編集するだけです。とにかくありがとう。

+0

私たちとPointFクラスを共有できますか? –

+0

System.Drawing.PointFクラス。 XとYの両方のプロパティがあり、どちらもfloatです。 – Marlon

答えて

0

これらのオブジェクトをどのようにシリアライズ/デシリアライズするかを指定していませんが、このような問題を回避するにはこのプロセスでCultureInfo.InvariantCultureを使用する必要があります。最終的に小数点記号を変更してください:

System.Globalization.CultureInfo customCulture = (System.Globalization.CultureInfo)System.Threading.Thread.CurrentThread.CurrentCulture.Clone(); 
customCulture.NumberFormat.NumberDecimalSeparator = "."; 

System.Threading.Thread.CurrentThread.CurrentCulture = customCulture; 
関連する問題