繁体   English   中英

为什么我不能在同一个类上使用WCF DataContract和ISerializable?

[英]Why can't I use WCF DataContract and ISerializable on the same class?

我有一个类,我需要能够序列化到SQLServer会话变量并通过WCF服务可用。 我已将其声明如下

namespace MyNM
{
[Serializable] 
[DataContract(Name = "Foo", Namespace = "http://www.mydomain.co.uk")]

public class Foo : IEntity, ISafeCopy<Foo>
{
    [DataMember(Order = 0)] 
    public virtual Guid Id { get; set; }

    [DataMember(Order = 1)] 
    public virtual string a { get; set; }

    DataMember(Order = 2)]
    public virtual Bar c { get; set; }

    /* ISafeCopy implementation */
}


[Serializable]
[DataContract(Name = "Bar ", Namespace = "http://www.mydomain.co.uk")]
public class Bar : IEntity, ISafeCopy<Bar>
{
    #region Implementation of IEntity

    DataMember(Order = 0)]
    public virtual Guid Id { get; set; }
    [DataMember(Order = 1)]
    public virtual Baz y { get; set; }

    #endregion

    /* ISafeCopy implementation*/
}


[Serializable]
[DataContract]
public enum Baz
{
    [EnumMember(Value = "one")]
    one,
    [EnumMember(Value = "two")]
    two,
    [EnumMember(Value = "three")]
    three
}

但是当我尝试调用此服务时,我在跟踪日志中收到以下错误。

“System.Runtime.Serialization.InvalidDataContractException:Type'BarProxybcb100e8617f40ceaa832fe4bb94533c'不能是ISerializable并且具有DataContractAttribute属性。”

如果我取出Serializable属性,WCF服务可以工作,但是当对象无法序列化为session时。 如果我从类Bar中删除DataContract属性,则WCF服务无法说明

输入“BarProxy3bb05a31167f4ba492909ec941a54533”,数据合同名称为“BarProxy3bb05a31167f4ba492909ec941a54533: http//schemas.datacontract.org/2004/07/ ”。 将任何静态未知的类型添加到已知类型列表中 - 例如,通过使用KnownTypeAttribute属性或将它们添加到传递给DataContractSerializer的已知类型列表中

我已经尝试将一个KnownType属性添加到foo类

[KnownType(typeof(Bar))]

但我仍然得到同样的错误。

任何人都可以帮我解决这个问题吗?

非常感谢

戴夫

MSDN上的这个问题可能会有所帮助: DataContract与Serializable

该线程接受的答案:

  1. [DataContract][Serializable]可以一起使用。

  2. DataContractSerializer了解它们。 如果类型用两者标记,则需要[DataContract]的投影

  3. 以下是WCF中有关数据传输和序列化的文档,它们提供了有关序列化程序和已知类型的大量详细信息: 数据传输和序列化

我知道这已经很晚了,但如果有人读到这个,我们就有类似的问题了。 我们将DataContract保留为WCF序列化的解决方案很好,然后当我们序列化到SQL Server会话时,我们将对象序列化为JSON并将其写入会话。

我遇到了与wcf中的实体框架pocos序列化相同的问题。 没有什么工作,当我尝试从成员中删除虚拟标签时我就要放弃了。 突然间它开始工作了。 试一试。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM