C# Web服务对结构对象的序列化

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

我通过向System.DateTime结构添加一些基本字段来“扩展”它。理想情况下,我希望能够通过Web服务将此对象交付给winforms客户端

我已经将stuct类型标记为
[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()过程中重新水化了结构。