说我有
public class Parent{
[ApiMember(Name = "parentItem")]
public string Item {get; set;}
}
和
public class Child : Parent {
[ApiMember(Name = "childItem")]
public new string Item {get; set;}
}
由于应该隐藏父类中的'Item'属性,为什么用{"childItem": "something"}
发出请求会返回Could not find property childItem on RequestObject
?也就是说,重命名子类中继承的API成员/属性的最佳方法是(或有办法)?
答案 0 :(得分:2)
[DataContract]
和[DataMember]
属性会影响序列化,其中[Api*]
属性仅用于记录和添加有关您的API的额外元数据,但不会影响序列化行为。
因此,您应该将DTO更改为:
[DataContract]
public class Parent
{
[DataMember(Name = "parentItem")]
public virtual string Item { get; set; }
}
[DataContract]
public class Child : Parent
{
[DataMember(Name = "childItem")]
public override string Item { get; set; }
}
在大多数ServiceStack序列化程序中进行序列化时将在何处使用它们,例如:
var json1 = new Parent { Item = "parent" }.ToJson();
json1.Print();
var json2 = new Child { Item = "child" }.ToJson();
json2.Print();
哪个输出:
{"parentItem":"parent"}
{"childItem":"child"}
答案 1 :(得分:1)
尝试在父级中将属性虚拟化,然后在子类中简单地覆盖它(不使用new
关键字),
public class Parent{
[ApiMember(Name = "parentItem")]
public virtual string Item {get; set;}
}
public class Child : Parent {
[ApiMember(Name = "childItem")]
public override string Item {get; set;}
}