问题描述
我是有一点问题与序列化的TimeZoneInfo对象。我试图用的TimeZoneInfo变量数据合同WCF服务,但系列化是失败。所以我写了这一小段代码来测试序列化。这里有一个我做的:
I'm have a bit of a problem with serializing TimeZoneInfo object. I was trying to use TimeZoneInfo variable in data contract for WCF service but the serialization was failing. So i wrote this little piece of code to test the serialization. Here's a what i do:
var fileName = "tmp.xml";
var tz = TimeZoneInfo.Local;
var dataSer = new DataContractSerializer(typeof(TimeZoneInfo));
try
{
using (var xml = new FileStream(fileName, FileMode.Create))
{
dataSer.WriteObject(xml, tz);
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
现在,当我调用writeObject方法抛出异常:
Now, when i call WriteObject method it throws an exception:
键入System.TimeZoneInfo + AdjustmentRule []'数据合同名称'ArrayOfTimeZoneInfo.AdjustmentRule:HTTP://schemas.datacontract.org/2004/07 /不期望系统。考虑使用DataContractResolver或者添加静态已知到已知类型的列表中的任何类型的不 - 例如,通过使用KnownTypeAttribute属性或通过将其添加到已知类型传递给DataContractSerializer列表
如果我尝试添加
[KnownType(typeof运算(System.TimeZoneInfo.AdjustmentRule []))]对类我得到了同样的错误。如果我这一行添加到我的数据接口的合同,我得到编译错误:
If i attempt to add[KnownType(typeof(System.TimeZoneInfo.AdjustmentRule[]))] to the class i get the same error. And if i add this line to my data contract interface i get compile error:
错误1'System.TimeZoneInfo.AdjustmentRule是由于无法访问其保护级别
和根据文档的TimeZoneInfo类实现ISerializable的,所以应该默认序列化。
And according to the documentation TimeZoneInfo class implements ISerializable so it should serialize by default.
谁能告诉我什么,我做错了什么?我将不胜感激任何帮助。
Can anyone tell me what i'm doing wrong here? I would appreciate any help.
感谢。
推荐答案
我不知道为什么它不只是简单的序列,但你认为只是序列化的?这很可能是相当更加高效 - 更简单! - 比内所有序列的信息,应该罚款,只要这两个系统都具有时区
I'm not sure why it doesn't just serialize simply, but have you considered just serializing the ID? That's likely to be rather more efficient - and simpler! - than serializing all the information inside, and should be fine so long as both systems have that time zone.
编辑:请注意,这不会使用自定义时区工作,为此,你应该看看 ToSerializedString
其他地方注明。
Note that this won't work with custom time zones, for which you should look at ToSerializedString
as noted elsewhere.
这篇关于C#的TimeZoneInfo系列化的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!