关于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 }
测试在不同的culture中序列化时间,可以发现序列化的结果是一致的,ConsoleWrite的结果是不一致的。
So,放心使用XML序列化。
题外话:有时候系统中的类无法序列化,不知伙伴们如何解决。我采用了如下的方法
http://blog.163.com/very_apple/blog/static/27759236201463035249202/
采用反射获得。
大家还有什么好方法 说出来分享一下啦~