gpt4 book ai didi

c# - 通过 web 服务序列化结构对象

转载 作者:太空宇宙 更新时间:2023-11-03 11:55:49 25 4
gpt4 key购买 nike

我通过向其中添加一些基本字段来“扩展”System.DateTime 结构。理想情况下,我希望能够通过网络服务将此对象传送到 winforms 客户端。

我已将结构类型标记为 [Serializable] 并且它还实现了 ISerializable,但是如果我检查由 web 服务传送的 XML,它只包含一个空的对象的标记。

到处设置断点让我相信,当对象脱水时,ISerializable 方法 void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context) 似乎永远不会被调用。

出于多种原因,我宁愿将其保留为结构,但在必要时会将其转换为类。

有谁知道为什么 .net 框架在为 Web 服务响应准备数据时忽略了 GetObjectData?我正在使用的结构包含一个 DateTime 成员和一些 bool 值。

请注意,这是 .net 2.0!

干杯

最佳答案

首先,Web 服务使用 XmlSerializer - 因此您需要 IXmlSerializable 来进行自定义序列化。标准的 XmlSerializer 序列化仅作用于同时具有 getter 和 setter 的公共(public)属性。

其次,结构通常不能很好地用作网络服务 DTO 对象;特别是,XmlSerializer 要求事物是可变的……哪些结构不应该是可变的。

我个人会使用一个类。如果你能提供更多信息,我也许可以说更多...

例如:

[Serializable]
public class FunkyTime
{
[XmlAttribute]
public DateTime When { get; set; }
[XmlAttribute]
public bool IsStart { get; set; }
[XmlAttribute]
public bool IsEnd { get; set; }
}

(请注意,您可以通过多种方式调整 xml 布局/名称)

关于c# - 通过 web 服务序列化结构对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/532547/

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