我正在嘗試撰寫一個測驗來檢查我可以使用[JsonConverter(typeof(JsonEnumConverter))]屬性反序列化我的所有列舉,
所以我有這個(進行中)測驗生成器代碼:
private class TestDataGenerator: IEnumerable<object[]>
{
public IEnumerator<object[]> GetEnumerator()
{
var allEnums = typeof(RecordType).Assembly.GetTypes().Where(t => t.IsEnum);
var testEnums = allEnums.Where(e => e.GetCustomAttributes().Any(a => a is JsonConverter));
var enumMemberInfo = testEnums.SelectMany(e => e.GetMembers(BindingFlags.Static | BindingFlags.Public));
IEnumerable<object[]> enumsWithNames = enumMemberInfo.Select(e =>
{
Enum.TryParse(e.Name, out RecordType res);
return new object[]
{
res,
((JsonPropertyNameAttribute)e.GetCustomAttributes().First(a => a is JsonPropertyNameAttribute)).Name
};
});
return enumsWithNames.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
}
如果我報廢testEnums.SelectMany并typeof(RecordObject)直接運行它,這有效。
所以跳上除錯器,問題似乎是testEnums評估為空。如果我再看allEnums[0].GetCustomAttributes(),[JsonConverter(T)]則無處可見。
這是我的列舉:
[JsonConverter(typeof(JsonStringEnumConverter))]
public enum RecordType
{
[JsonPropertyName("country")]
Country = 1,
[JsonPropertyName("destinationOrbit")]
DestinationOrbit = 2,
// etc
}
任何想法為什么我的列舉中顯然不存在此屬性以及如何在運行時獲取此資訊?
uj5u.com熱心網友回復:
你必須過濾JsonConverterAttribute而不是JsonConverter
var testEnums = allEnums.Where(e => e.GetCustomAttributes().Any(a =>
a is JsonConverterAttribute));
Visual Studio 將只顯示JsonConverter而不是顯示JsonConverterAttribute在類上方,但如果將游標懸停在型別上,則會看到全名。
這JsonConverter是一種不同的型別。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/396430.html
