从从属对象中提取基对象
本文关键字:对象 提取 | 更新日期: 2023-09-27 18:14:24
我有一个基类和一个从属类。
class A
{
...
}
class B : A
{
...
}
我如何从依赖类中提取基类的对象?
B myDependant = new B();
A myBase = (A) myDependant;
(A)
类型是可选的,但myBase
对象仍然是B
类型。我想让myBase
的类型为A
,而不创建一个新的对象。
好吧,你可以创建自己的契约解析器来检查属性是否属于某种类型,如果不是,它会将其标记为忽略:
class MyContractResolver<T> : DefaultContractResolver
{
protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization)
{
var list = base.CreateProperties(type, memberSerialization);
var baseProps = typeof(T).GetProperties();
foreach (var prop in list)
{
prop.Ignored = baseProps?.All(p => p.Name != prop.PropertyName) ?? false;
}
return list;
}
}
并使用它:
var myDependant = new B();
var settings = new JsonSerializerSettings() { ContractResolver = new MyContractResolver<A>() };
var json = JsonConvert.SerializeObject(myDependant, settings);
这里的优点是你的类只会被序列化一次,缺点是如果A继承了其他类,它的属性也会被序列化。
根据您的上一个评论,您可以这样做:
B myDependant = new B();
A myBase = JsonConvert.DeserializeObject<A>(JsonConvert.SerializeObject(myDependant));
这样,myBase
将成为A
类的一个实例。