【发布时间】:2011-09-28 15:29:27
【问题描述】:
我将 protobuf-net v2 beta r431 用于 C# .net 4.0 应用程序。在我的应用程序中,我有一个需要序列化的Dictionary<int, IMyClass>。一个类MyClass 实现IMyClass 接口。根据 protobuf 的文档,我将代码编写如下:
[ProtoContract]
[ProtoInclude(1, typeof(MyClass))]
public interface IMyClass
{
int GetId();
string GetName();
}
[ProtoContract]
[Serializable]
public class MyClass : IMyClass
{
[ProtoMember(1)]
private int m_id = 0;
[ProtoMember(2)]
private string m_name = string.Empty;
public MyClass(int id, string name)
{
m_id = id;
m_name = name;
}
public MyClass()
{
}
#region IMyClass Members
public int GetId()
{
return m_id;
}
public string GetName()
{
return m_name;
}
#endregion
}
但是,根据我的应用程序的设计,接口是在更高级别定义的(在与类不同的项目中),并且无法在编译时确定实现此接口的类/类。因此,它给出了 [ProtoInclude(1, typeof(MyClass))] 的编译时错误。我尝试使用 [ProtoInclude(int tag, string KownTypeName)] 如下:
[ProtoContract]
[ProtoInclude(1, "MyClass")]
public interface IMyClass
{
int GetId();
string GetName();
}
但是,这在
行引发了“对象引用未设置为对象的实例”异常Serializer.Serialize(stream, myDict);
哪里 Dictionary myDict = new Dictionary(int, IMyClass)(); 请让我知道在这种情况下如何使用 ProtoInclude 来序列化字典/列表中的接口类型。
【问题讨论】:
标签: c# protobuf-net