在一个应用程序中,我使用不同的框架/技术来序列化/反序列化对象。要忽略对象中的属性,可以使用BsonIgnore
或JsonIgnore
之类的属性。
[JsonIgnore]
[BsonIgnore]
public bool MyProperty
{
get;
set;
}
如何创建一个从BsonIgnore
和JsonIgnore
扩展的属性,这样我只需为MyProperty
指定一个属性?
以下内容不起作用,因为属性必须扩展System.Attribute
。
[AttributeUsage(AttributeTargets.Class)]
public class MyIgnoreAttribute : BsonIgnore, JsonIgnore
{ ... }
-------------------------
[MyIgnore]
public bool MyProperty
{
get;
set;
}
答案 0 :(得分:2)
这是没有用的,也是不可能的。
查看JsonIgnoreAttribute
的源代码:
namespace Newtonsoft.Json
{
/// <summary>
/// Instructs the <see cref="T:Newtonsoft.Json.JsonSerializer" /> not to serialize the public field or public read/write property value.
/// </summary>
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = false)]
public sealed class JsonIgnoreAttribute : Attribute
{
}
}
如您所见,它什么也没做。
在newtonsoft框架there is a code中,该检查属性是否具有JsonIgnoreAttribute
并为此做特殊工作。它只希望使用JsonIgnoreAttribute。
此外,JsonIgnoreAttribute
是密封的,您不能对其进行扩展。
答案 1 :(得分:1)
C#不支持多重继承,并且每种类型都是Student student = processStudentData(strArray);
if (student != null) {
System.out.println(student.getStudentId());
}
,因此无论如何都不能继承它们。但是可能会有不同的方法来做您要尝试做的事情。
如果是可预测的事物,例如:如果具有一个属性的事物应始终具有另一属性;您可以使用面向方面的编程在编译时注入其他属性。
您的下一个问题将是“我该怎么做?” ,答案将取决于您使用的产品。
此后,您的问题将是“我应该使用哪种产品进行AOP?” ,这是题外话,如here所示(提示:看一下链接页)。