关于XML序列化与CultureInfo

  不同的计算机系统可能有着不同的CultureInfo,例如在中文环境下日期通常这样显示03/30/2016,而在有的操作系统下它可能是这样的30.3.2016。

  这样的话带来一个问题,例如在中文环境下序列化了一个日期类,那么到了非中文环境下是否还能反序列回来呢?

 

 

 

     其实这是不用担心的,C#中XML序列化是与CultureInfo无关的。我提出这一观点有两点理由:

 

  1.https://social.msdn.microsoft.com/Forums/windowsdesktop/zh-CN/0df9998e-8bee-4eed-93dd-fe627509b215/xmlserializerthreadculture

  其中有人回答了 原文在这里

  http://weblogs.asp.net/psteele/xmlserializer-ignores-culture

  大意就是有个higher(可能是牛B的)的人回答了xmlserializer-ignores-culture

 

  2.自己测试,上测试程序。

 1  public class TestClass
 2     {
 3         public DateTime time;
 4     }
 5     class Program
 6     {
 7         static void Main(string[] args)
 8         {
 9             TestClass MyClass = new TestClass();
10             MyClass.time = new DateTime(2005, 1, 12);
11             //var currentCulture = CultureInfo.CurrentCulture;
12             var currentCulture = Thread.CurrentThread.CurrentCulture;
13             Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;     
14             XmlSerializer serializer = new XmlSerializer(typeof(TestClass));
15             
16             serializer.Serialize(Console.Out, MyClass);
17 
18             Console.WriteLine(MyClass.time.ToShortDateString());
19 
20             CultureInfo cul = CultureInfo.GetCultureInfo("de-de");
21             //MyClass.time = new DateTime(2005,1,12);
22             Thread.CurrentThread.CurrentCulture = cul;
23             serializer.Serialize(Console.Out, MyClass);
24             Console.WriteLine(MyClass.time.ToShortDateString());
25             Console.Read();
26 
27         }
28     }
View Code

  测试在不同的culture中序列化时间,可以发现序列化的结果是一致的,ConsoleWrite的结果是不一致的。

 

  So,放心使用XML序列化。

 

 

题外话:有时候系统中的类无法序列化,不知伙伴们如何解决。我采用了如下的方法

       http://blog.163.com/very_apple/blog/static/27759236201463035249202/

  采用反射获得。

  大家还有什么好方法 说出来分享一下啦~

posted @ 2016-03-30 08:54  胖胖仔  阅读(222)  评论(0编辑  收藏  举报