public interface IBase
{
int Id { get; set; }
}
public interface IDerivedA : IBase
{
int Name { get; set; }
int Quantity { get; set; }
}
public interface IDerivedB : IBase
{
string Name { get; set; }
IEnumerable<IDerivedA> DerivedBs { get; set; }
}
这是将要序列化的类的实现,但是当我尝试使用 DerivedASerialize 类时遇到了编译错误,该类是 IDerivedA 界面
[MessagePack.Union(0, typeof(DerivedASerialize))]
[MessagePack.Union(1, typeof(DerivedBSerialize))]
[MessagePack.MessagePackObject(true)]
public class BaseSerialize : IBase
{
public int Id { get; set; }
public bool IsNull { get;set; }
}
[MessagePack.MessagePackObject(true)]
public class DerivedASerialize : BaseSerialize, IDerivedA
{
public int Name { get; set; }
public int Quantity { get; set; }
}
[MessagePack.MessagePackObject(true)]
public class DerivedBSerialize : BaseSerialize, IDerivedB
{
public string Name { get; set; }
public IEnumerable<DerivedASerialize> DerivedBs { get; set; }
}
有什么解决方法吗?因为我只能序列化类。
我想拥有另一个也从相同接口派生且具有不同属性的类
使用neuec的MessagePack。
编辑:向类添加序列化逻辑。
答案 0 :(得分:0)
如果您需要两个不同的“名称”字段,则可以使用显式接口实现:
public class DerivedBSerialize : BaseSerialize, IDerivedB
{
public string Name { get; set; }
public IEnumerable<DerivedASerialize> DerivedBs { get; set; }
string IDerivedB.Name { get; set; }
IEnumerable<IDerivedA> IDerivedB.DerivedBs { get; set; }
}
如果仅需要一个“名称”字段-您可以将其提升为“ IBase”,或创建另一个接口-
interface INameable { string Name {get; set;} }