不同的计算机系统可能有着不同的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/
采用反射获得。
大家还有什么好方法 说出来分享一下啦~