1

インバリアント カルチャで 10 進数を逆シリアル化することは可能ですか?

私はこのパターンでそれを行うことができます:

 [XmlIgnore]
    public decimal CurrencyValue { get; set; }

    [XmlAttribute("CurrencyValue")]
    public string CurrencyValueString
    {
        set { CurrencyValue = Convert.ToDecimal(value, CultureInfo.InvariantCulture); }
    }

しかし、私のコンテナは多くの小数で構成されており、これを何度も行うのは恥ずかしいです。しかも見た目がおかしい。

4

2 に答える 2

0

私はテストをしました

XmlSerializer ser = new XmlSerializer(typeof(decimal));
        StringBuilder builder = new StringBuilder();
        CultureInfo.DefaultThreadCurrentCulture = CultureInfo.InvariantCulture;
        var row = XElement.Parse(@"<decimal>321,64</decimal>");
        using (var xmlReader = row.CreateReader())
        {
           var result = (decimal)ser.Deserialize(xmlReader);
        }

残念ながら、これは例外をスローしますが、2 番目の例は 32164 を返します (ところで、それは良い結果ですか?)

XmlSerializer ser = new XmlSerializer(typeof(string));
        StringBuilder builder = new StringBuilder();
        var row = XElement.Parse(@"<string>321,64</string>");
        using (var xmlReader = row.CreateReader())
        {
           var result = (string)ser.Deserialize(xmlReader);
           decimal s = Convert.ToDecimal(result,CultureInfo.InvariantCulture);
        }
于 2016-03-16T14:12:55.300 に答える
0

.Net 4.5 を使用している場合は、CultureInfo.DefaultThreadCurrentCulture を使用して、現在のスレッドまたはアプリケーション全体のデフォルトとして InvariantCulture を使用することを決定できます。

情報はこちらをご覧ください。

于 2016-03-16T13:44:48.283 に答える