我正在使用.NET开发桌面应用程序。我想以一种方式将一些数据保存到文件中,以后我可以自由地更改我正在保存的数据,例如添加新字段,同时保留从旧格式中读取保存的可能性。 / p>
This answer建议使用DataContractSerializer
代替BinaryFormatter
。
但是我不能在项目的类中使用[DataContract]
属性。在using System.Runtime.Serialization;
之后,我仍然会收到有关未知类型的错误。
该项目的目标是.NET Framework 4。
我已经了解到数据契约是WCF框架的一部分,我假设我应该以某种方式配置我的项目以使用它。怎么样?
答案 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]
属性。