C# 无法使用派生类实现属性 公共接口IBase { int Id{get;set;} } 公共接口IDerivedA:IBase { int Name{get;set;} int数量{get;set;} } 公共接口IDerivedB:IBase { 字符串名称{get;set;} IEnumerable DerivedBs{get;set;} }

C# 无法使用派生类实现属性 公共接口IBase { int Id{get;set;} } 公共接口IDerivedA:IBase { int Name{get;set;} int数量{get;set;} } 公共接口IDerivedB:IBase { 字符串名称{get;set;} IEnumerable DerivedBs{get;set;} },c#,inheritance,serialization,interface,derived-class,C#,Inheritance,Serialization,Interface,Derived Class,这里是一个将被序列化的类的实现,但是当我尝试使用DerivedASerialize类时,我遇到了编译错误,该类是来自IDerivedA接口的派生类 public interface IBase { int Id { get; set; } } public interface IDerivedA : IBase { int Name { get; set; } int Quantity { get; set; } } public interface IDerived

这里是一个将被序列化的类的实现,但是当我尝试使用DerivedASerialize类时,我遇到了编译错误,该类是来自IDerivedA接口的派生类

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; }
}
[MessagePack.Union(0,typeof(DerivedASerialize))]
[MessagePack.Union(1,typeof(DerivedBSerialize))]
[MessagePack.MessagePackObject(true)]
公共类BaseSerialize:IBase
{
公共int Id{get;set;}
公共bool为空{get;set;}
}
[MessagePack.MessagePackObject(true)]
公共类派生的序列化:BaseSerialize,IDerivedA
{
公共int名称{get;set;}
公共整数数量{get;set;}
}
[MessagePack.MessagePackObject(true)]
公共类派生的B序列化:BaseSerialize,IDerivedB
{
公共字符串名称{get;set;}
公共IEnumerable派生B{get;set;}
}
附近有工作吗?因为我只能序列化类

我想有另一个类,它也从同一个接口派生,具有不同的属性

使用neuec的MessagePack


编辑:向类添加序列化逻辑。

如果需要两个不同的“名称”字段,可以使用显式接口实现:

[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; }
}

属性“DerivedBs”无法实现接口“IDerivedB”中的属性。类型应为“IDerivedA”您如何序列化该类?向我们展示代码,以及更新@bashrcI已经尝试过了,但是当我序列化类时,我会得到一个异常,因为我无法序列化接口,虽然我可以将其添加为ignore属性,但如果有更多的类,它将变得杂乱无章..我已经编辑了我的答案-我认为添加一个或两个接口可以解决您的问题,如果有帮助,请告诉我
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; }
}
interface INameable { string Name {get; set;} }