Red*_*ber 7 c# wcf timezone serialization
我在序列化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);
}
Run Code Online (Sandbox Code Playgroud)
现在,当我调用WriteObject方法时,它会抛出异常:
键入'System.TimeZoneInfo + AdjustmentRule []',数据合约名称为'ArrayOfTimeZoneInfo.AdjustmentRule:http://schemas.datacontract.org/2004/07/System'不是预期的.考虑使用DataContractResolver或将任何静态未知的类型添加到已知类型列表中 - 例如,通过使用KnownTypeAttribute属性或将它们添加到传递给DataContractSerializer的已知类型列表中.
如果我尝试将[KnownType(typeof(System.TimeZoneInfo.AdjustmentRule []))]添加到类中,我会得到相同的错误.如果我将此行添加到我的数据合同接口,我会收到编译错误:
错误1'System.TimeZoneInfo.AdjustmentRule'由于其保护级别而无法访问
根据文档,TimeZoneInfo类实现了ISerializable,因此它应该默认序列化.
谁能告诉我这里我做错了什么?我将不胜感激任何帮助.
谢谢.