【发布时间】:2011-10-09 16:33:55
【问题描述】:
我在序列化 TimeZoneInfo 对象时遇到了一点问题。我试图在 WCF 服务的数据合同中使用 TimeZoneInfo 变量,但序列化失败。所以我写了一小段代码来测试序列化。这是我的工作:
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 方法时,它会引发异常:
不应使用数据合同名称“ArrayOfTimeZoneInfo.AdjustmentRule:http://schemas.datacontract.org/2004/07/System”键入“System.TimeZoneInfo+AdjustmentRule[]”。考虑使用 DataContractResolver 或将任何静态未知的类型添加到已知类型列表中 - 例如,通过使用 KnownTypeAttribute 属性或将它们添加到传递给 DataContractSerializer 的已知类型列表中。
如果我尝试添加 [KnownType(typeof(System.TimeZoneInfo.AdjustmentRule[]))] 到类我得到同样的错误。如果我将此行添加到我的数据合约接口中,我会收到编译错误:
错误 1 'System.TimeZoneInfo.AdjustmentRule' 由于其保护级别而无法访问
并且根据文档 TimeZoneInfo 类实现 ISerializable 所以它应该默认序列化。
谁能告诉我我在这里做错了什么?我将不胜感激。
谢谢。
【问题讨论】:
标签: c# wcf serialization timezone