是否可以扩展属性?

时间:2018-09-24 03:07:14

标签: c#

在一个应用程序中,我使用不同的框架/技术来序列化/反序列化对象。要忽略对象中的属性,可以使用BsonIgnoreJsonIgnore之类的属性。

[JsonIgnore]
[BsonIgnore]
public bool MyProperty
{
    get;
    set; 
}

如何创建一个从BsonIgnoreJsonIgnore扩展的属性,这样我只需为MyProperty指定一个属性?

以下内容不起作用,因为属性必须扩展System.Attribute

[AttributeUsage(AttributeTargets.Class)]
public class MyIgnoreAttribute : BsonIgnore, JsonIgnore
{ ... }

-------------------------

[MyIgnore]
public bool MyProperty
{
    get;
    set; 
}

2 个答案:

答案 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所示(提示:看一下链接页)。