C# 读取属性中的属性用法?

C# 读取属性中的属性用法?,c#,reflection,C#,Reflection,如何在运行时使用C#中的反射读取基于属性的属性 我创建了一个类似的类: public class PictureField { public IList<Cropping> Croppings { get; set; } } public class Cropping { public int Width { get; set; } public int Height { get; set; } public string Device { get; set; }

如何在运行时使用C#中的反射读取基于属性的属性


我创建了一个类似的类:

public class PictureField
{
  public IList<Cropping> Croppings { get; set; }
}

public class Cropping
{
  public int Width { get; set; }
  public int Height { get; set; }
  public string Device { get; set; }
  public string SrcSet { get; set; }
}
因此,我创建了如下属性:

[AttributeUsage(AttributeTargets.Property, AllowMultiple = true, Inherited = true)]
public class CropPointAttribute : Attribute
{
  public CropPointAttribute(int width, int height, string device, string srcSet)
  {
    this.Width = width;
    this.Height = height;
    this.Device = device;
    this.SrcSet = srcSet;
  }

  public int Width { get; }
  public int Height { get; }
  public string Device { get; }
  public string SrcSet { get; }
}

但是,我不知道如何从我的
PictureField
类中读取
CropPoint
属性。如何获取父对象的句柄并读取它们声明的属性?

我认为没有任何方法可以从
PictureField
访问属性。但是,您可以从
ResponsiveBlockImage
ResponsiveBlockImage
及其属性访问该属性。您可以直接从代码中传递值,而不是通过指定属性来传递。为什么要使用属性?

我认为无论如何都没有办法从
PictureField
访问属性。但是,您可以从
ResponsiveBlockImage
ResponsiveBlockImage
及其属性访问该属性。您可以直接从代码中传递值,而不是通过指定属性来传递。为什么要使用属性?

可以从类型(使用typeof()或GetType())访问属性。如果需要知道PictureField实例中包含给定PictureField的对象类型,则需要将该信息传递给它,例如在构造时。你也可以考虑其他选项,比如有一个泛型的PigStFieldType,其中T是几个类中的一个,它具有一组CROPoPOT属性(在类上),尽管我认为这会推导出属性的边界,因为在那个时候,你也可以在代码中定义它们(在Pixfield的子类型中)。而不是元数据。对于未来好奇的人来说。。。这是针对episervercms的。事实证明,您可以使用自定义的
EditorDescriptor
读取此信息,并在编辑模式下将其传递给自定义dojo小部件。您可以从类型(使用typeof()或GetType())访问属性。如果需要知道PictureField实例中包含给定PictureField的对象类型,则需要将该信息传递给它,例如在构造时。你也可以考虑其他选项,比如有一个泛型的PigStFieldType,其中T是几个类中的一个,它具有一组CROPoPOT属性(在类上),尽管我认为这会推导出属性的边界,因为在那个时候,你也可以在代码中定义它们(在Pixfield的子类型中)。而不是元数据。对于未来好奇的人来说。。。这是针对episervercms的。事实证明,您可以使用自定义的
EditorDescriptor
读取此信息,并在编辑模式下将其传递给自定义dojo小部件。
[AttributeUsage(AttributeTargets.Property, AllowMultiple = true, Inherited = true)]
public class CropPointAttribute : Attribute
{
  public CropPointAttribute(int width, int height, string device, string srcSet)
  {
    this.Width = width;
    this.Height = height;
    this.Device = device;
    this.SrcSet = srcSet;
  }

  public int Width { get; }
  public int Height { get; }
  public string Device { get; }
  public string SrcSet { get; }
}