Implementuję niestandardowy obiekt IFormatter do przekształcania obiektów do niestandardowego formatu, który jest wymagany przez nasze dotychczasowe systemy.Uzyskaj właściwość właściwości Auto C# z pola wsparcia
Jeśli oświadczam właściwość C# Auto:
[StringLength(15)]
public MyProperty { get; set; }
a następnie w moim metoda niestandardowy serializacji dostaję szeregowej pola przez:
MemberInfo[] members =
FormatterServices.GetSerializableMembers(graph.GetType(), Context);
Jak mogę uzyskać dostęp do atrybutu StringLength że ozdabia auto Property?
Aktualnie otrzymuję informacje o nieruchomościach, korzystając z konwencji nazewnictwa <PropertyName>k_backingfield
. Wolałbym nie polegać na tym, ponieważ wydaje się, że jest to szczególny szczegół implementacji kompilatora C#. Czy istnieje lepszy sposób?
Myślę, że utknąłeś za pomocą konwencji, brakuje dynamicznej kontroli IL dla każdego gettera właściwości lub ustawiacza w celu określenia pola odniesienia. –
Czy próbowałeś wywołać [GetCustomAttributes] (http://msdn.microsoft.com/en-us/library/kff8s254.aspx) na elementach tablicy członków? – dasblinkenlight
@dasblinkenlight - tak, zwraca atrybuty pola kopii, a nie właściwości. Jest to tylko atrybut generowania kodu, który jest automatycznie dodawany przez kompilację. – PhilB