C# Web服务对结构对象的序列化
我通过向System.DateTime结构添加一些基本字段来“扩展”它。理想情况下,我希望能够通过Web服务将此对象交付给winforms客户端 我已经将stuct类型标记为C# Web服务对结构对象的序列化,c#,web-services,serialization,.net-2.0,C#,Web Services,Serialization,.net 2.0,我通过向System.DateTime结构添加一些基本字段来“扩展”它。理想情况下,我希望能够通过Web服务将此对象交付给winforms客户端 我已经将stuct类型标记为[Serializable],并且它也实现了ISerializable,但是如果我检查Web服务交付的XML,它只包含对象的空标记 到处放置断点让我相信,当对象去水合时,ISerializable方法void ISerializable.GetObjectData(SerializationInfo,StreamingCon
[Serializable]
,并且它也实现了ISerializable
,但是如果我检查Web服务交付的XML,它只包含对象的空标记
到处放置断点让我相信,当对象去水合时,ISerializable方法void ISerializable.GetObjectData(SerializationInfo,StreamingContext context)
似乎永远不会被调用
我之所以希望将其保留为一个结构体,有各种各样的原因,但如果需要的话,我会将其转换为一个类
有人知道为什么.net framework在为webservice响应准备数据时会忽略GetObjectData吗?我正在使用的结构包含一个DateTime成员和几个布尔值
请注意,这是.net 2.0强>
干杯首先,web服务使用
XmlSerializer
——因此您需要IXmlSerializable
进行自定义序列化。标准的XmlSerializer
序列化仅作用于同时具有getter和setter的公共属性
第二,结构通常不如web服务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布局/名称)谢谢,我需要实现的是IXmlSerializable接口,它工作正常-仍然在一个结构中!在我的特定实例中,我没有使用[XmlAttribute]标记,因为我有一组特定的优化值,我在去水合状态下传递这些值。我在WriteXml()过程中准备了它,并在ReadXml()过程中重新水化了结构。