如何接受数据的"字典"作为自定义.NET属性参数?

Nig*_*888 5 c# xml json custom-attributes

我最近发现,一个.NET属性只能包含基本类型,字符串,枚举,对象和这些类型的单一参数数组作为讨论在这里.

我需要IDictionary<string, string>通过.NET属性接受,但显然我不能IDictionary<string, string>因为上述原因而使用.所以,我在这里寻找可以在这些指导方针中起作用的替代方案.

// I want to do this, but can't because of the CLR limitation
[MyAttribute(Attributes = new Dictionary { { "visibility", "Condition1" }, { "myAttribute", "some-value" } })]
Run Code Online (Sandbox Code Playgroud)

我提出的两个可能的选项是在声明中使用XMLJSON(作为.NET属性上的字符串),这可以很容易地IDictionary<string, string>为我的应用程序序列化,但是这会将声明变成一个冗长的容易出错的字符串没有语法检查.

// XML
[MyAttribute(Attributes = "<items><item key='visibility' value='Condition1'/><item key='myAttribute' value='some-value'/></items>")]

// JSON
[MyAttribute(Attributes = "{ 'visibility': 'Condition1', 'myAttribute': 'some-value' }")]
Run Code Online (Sandbox Code Playgroud)

如果有的话,还有哪些其他替代方案比这更优雅/更直接?

Seb*_*zus 9

据我所知,你可以多次添加一个属性(编辑:如果你将AllowMultiple设置为true,正如Robert Levy所说).因此,可能不是将一个属性与整个字典一起使用,而是可以使用多个属性,每个字典条目一个属性,每个属性都有一个键和一个值参数.

[MyDictionaryEntry(Key = key1, Value = val1)]
[MyDictionaryEntry(Key = key2, Value = val2)]
[MyDictionaryEntry(Key = key3, Value = val3)]
[MyDictionaryEntry(Key = key4, Value = val4)]
Run Code Online (Sandbox Code Playgroud)