gpt4 book ai didi

c# TimeZoneInfo 序列化

转载 作者:太空狗 更新时间:2023-10-29 20:21:43 26 4
gpt4 key购买 nike

我在序列化 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 方法时它抛出一个异常:

Type 'System.TimeZoneInfo+AdjustmentRule[]' with data contract name 'ArrayOfTimeZoneInfo.AdjustmentRule:http://schemas.datacontract.org/2004/07/System' is not expected. Consider using a DataContractResolver or add any types not known statically to the list of known types - for example, by using the KnownTypeAttribute attribute or by adding them to the list of known types passed to DataContractSerializer.

如果我尝试添加[KnownType(typeof(System.TimeZoneInfo.AdjustmentRule[]))] 到类我得到同样的错误。如果我将此行添加到我的数据契约(Contract)接口(interface),我会收到编译错误:

Error 1 'System.TimeZoneInfo.AdjustmentRule' is inaccessible due to its protection level

并且根据文档,TimeZoneInfo 类实现了 ISerializable,因此它应该默认序列化。

谁能告诉我我做错了什么?如果有任何帮助,我将不胜感激。

谢谢。

最佳答案

我不确定为什么它不只是简单地序列化,但您是否考虑过只序列化 ID ?这可能会更有效——也更简单! - 比序列化里面的所有信息,只要两个系统都有那个时区就应该没问题。

编辑:请注意,这不适用于自定义时区,您应该查看 ToSerializedString,如其他地方所述。

关于c# TimeZoneInfo 序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7704891/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com