如何设置应用程序以使用DataContracts?

时间:2012-02-08 12:10:56

标签: c# serialization

我正在使用.NET开发桌面应用程序。我想以一种方式将一些数据保存到文件中,以后我可以自由地更改我正在保存的数据,例如添加新字段,同时保留从旧格式中读取保存的可能性。 / p>

This answer建议使用DataContractSerializer代替BinaryFormatter

但是我不能在项目的类中使用[DataContract]属性。在using System.Runtime.Serialization;之后,我仍然会收到有关未知类型的错误。

该项目的目标是.NET Framework 4。

我已经了解到数据契约是WCF框架的一部分,我假设我应该以某种方式配置我的项目以使用它。怎么样?

3 个答案:

答案 0 :(得分:1)

可能缺少在需要时指定“知道类型”属性

看看下面的例子:

public interface ICustomerInfo
{
    string ReturnCustomerName();
}

[DataContract(Name = "Customer")]
public class CustomerTypeA : ICustomerInfo
{
    public string ReturnCustomerName()
    {
        return "no name";
    }
}

[DataContract(Name = "Customer")]
public class CustomerTypeB : ICustomerInfo
{
    public string ReturnCustomerName()
    {
        return "no name";
    }
}

[DataContract]
[KnownType(typeof(CustomerTypeB))]
public class PurchaseOrder
{
    [DataMember]
    ICustomerInfo buyer;

    [DataMember]
    int amount;
}

您必须指定ICustomerInfo的类型,否则序列化引擎无法猜出类型

答案 1 :(得分:1)

只需将wcf服务模板添加到您的应用程序中,并在您的项目中声明您的函数和数据成员并引用wcf。

答案 2 :(得分:1)

在C#中,可以跨多个程序集共享名称空间。您必须添加对System.Runtime.Serialization.dll的引用,该引用包含[DataContract]属性。