使用xml传递特定于文化的double值

时间:2012-11-09 13:06:04

标签: xml cultureinfo

我一直在寻找可以帮助我在使用WPF和Silverlight的MVVM Prism设置中解决当前文化问题的方法。

我们的设置要求我们有一个中央服务器,它使用en-gb文化和我们的数据库语言设置 - 英语,Silverlight系统使用它没有问题,因为我们通过传递用户CultureInformation处理文化的差异通过服务调用允许我们使用double.parse(value,userCulture)处理XML中的值,这也允许我们传回值。我们还支持该软件的离线版本,该软件具有自己的本地数据库,该数据库与在线版本共享数据子集,使用软件内部更新功能进行更新。

如果我从数据库中检索XML数据,则采用以下示例格式

<code>
<Pipe>
 <RowNumber>1</RowNumber>
 <Standard>Schedule</Standard>
 <Size>125</Size>
 <DN>DN125</DN>
 <TransDN>DN125</TransDN>
 <Inches>5"</Inches>
 <Designation>40</Designation>
 <IntDia>128.20</IntDia>
 <OutDia>141.30</OutDia>
 <Wall>6.5500</Wall>
 <Area>1.290820730000000e002</Area>
</Pipe>
</code>

这会导致以下两种情况出现问题: 如果用户在本地运行软件,他们将直接访问dll,并可能尝试使用机器本地文化设置解析上述数值。例如,在西班牙的情况下,这将反转在数字字段中使用,.值。这导致IntDia值返回12820,00。

每次我想要检索XML数据时都可以指定详细信息,但是我想知道是否有更简洁的方法来处理这种情况,因此我们可能会在正确的文化中返回xml数据。

1 个答案:

答案 0 :(得分:0)

如果将来有人遇到这个问题,我必须找到另一种方法。

我改为选择在一个单独的线程下运行服务,我可以将Threads文化指定为CultureInvariant

        var task = Task.Factory.StartNew(() =>
        {
            Thread.CurrentThread.Name = "GetDetailsAsync";
            Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;

            var uD = details.GetDetails(userName, password, cultureDetails);
            this.dispatcher.BeginInvoke((Action)
                (() => completedAction.Invoke(this, new GetDetailsCompletedEventArgs(new object[] { uD }, null, false, null))));
        });

        task.ContinueWith(
            s =>
            {
                task.Dispose();
                Debug.WriteLine("GetDetailsAsync thread disposed.");
            });