首页 文章

带有DataContract的类上的BinaryFormatter问题?

提问于
浏览
3

我上课了

[DataContract]
    public class Car
   {
        public bool pbIsHatchBack;
        string prSt = "royi";

    }

我想用 BinaryFormatter 序列化它:

BinaryFormatter binFormat = new BinaryFormatter();
        Stream fStream = new FileStream("c:\\CarData.dat", FileMode.Create, FileAccess.Write, FileShare.None);
        binFormat.Serialize(fStream, carObj);
        fStream.Close();

但你得到这个错误

在程序集'ConsoleApplication2中输入'SerializationTypes Car',Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null'未标记为可序列化 .

如果我删除[ DataContract ]并将其替换为[ Serializable ],则为 ok . 但 why

WCF如何在场景后面做(当tcpBinding?)?

为什么 can't 我使用DataContract ???

1 回答

  • 6

    WCF不使用 BinaryFormatter 来序列化其对象,它使用 DataContractSerializer (默认情况下)或其他一些序列化程序( XmlSerializerDataContractJsonSerializer 等) . BinaryFormatter 在WCF之前发布(在.NET Framework 1.0,IIRC中),所以不知道 [DataContract] / [DataMember] 属性(在.NET Framework 3.0中与WCF一起发布) .

    netTcpBinding 上,WCF仍然使用 DataContractSerializer ,但它不使用"normal" XML读取器/写入器,而是使用二进制感知的XML读取器/写入器,这就是我们在WCF中使用二进制编码的方式 .

    WCF序列化程序了解 [Serializable] 属性,因此您也可以将其与WCF一起使用 . 或者您也可以使用这两个属性,如果您希望类型可以由 BinaryFormatter 序列化,但使用[DC] / [DM]属性为您提供的更细粒度的控件 .

相关问题