gpt4 book ai didi

c# - CodeDom 中方法的复杂属性声明

转载 作者:行者123 更新时间:2023-11-30 16:10:47 26 4
gpt4 key购买 nike

我正在尝试使用 CodeDom 生成一些方法,但在为这些方法生成自定义属性时遇到问题。

我可以管理简单的空属性,比如

[DataMember()]

或带有字符串值参数的属性,

[DataContract(Namespace = "http://somenamespace")]

但是我需要生成更复杂的属性,比如

[WebInvoke(Method = "POST", UriTemplate = "SomeTemplate", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]

[FaultContract(typeof(Collection<MyFault>))]

对于具有枚举值的参数 ResponseFormat = WebMessageFormat.Json我已经尝试过与我为字符串所做的类似的方法,创建一个 CodePrimitiveExpression 实例:

CodeAttributeDeclaration webInvoke = new CodeAttributeDeclaration()
{

Name = "WebInvoke",
Arguments =
{
new CodeAttributeArgument
{
Name = "Method",
Value = new CodePrimitiveExpression("POST")
},
new CodeAttributeArgument
{
Name = "UriTemplate",
Value = new CodePrimitiveExpression(method.Name)
},
new CodeAttributeArgument
{
Name = "RequestFormat",
Value = new CodePrimitiveExpression(WebMessageFormat.Json)
},
new CodeAttributeArgument
{
Name = "ResponseFormat",
Value = new CodePrimitiveExpression(WebMessageFormat.Json)
}
}
};

但是,这不起作用,我得到一个异常提示

Invalid Primitive Type: System.ServiceModel.Web.WebMessageFormat. Consider using CodeObjectCreateExpression.

我确实考虑过使用 CodeObjectCreateExpression,但我不知道该怎么做。它需要一个字符串或一个 CodeTypeReference,以及一个 CodeExpression 参数数组作为第二个参数。我不知道该放什么参数。

至于另一个属性,带有typeof(Colleciton<MyFault>) 的属性,我什至不知道从哪里开始。任何帮助将不胜感激。

编辑:有人建议我对我试图模仿的方法调用 CustomAttributeData.GetCustomAttributes,所以我这样做了。为了效率和清晰起见,我将在屏幕截图中提供数据。这让我对我正在处理的事情有了更好的了解,但我仍然不确定如何实现它。 enter image description here

最佳答案

WebMessageFormat.Json 这样的表达式看起来像是在访问一个静态字段,所以你必须这样写:

new CodeAttributeArgument
{
Name = "RequestFormat",
Value = new CodeFieldReferenceExpression(
new CodeTypeReferenceExpression("WebMessageFormat"), "Json")
}

typeof 表达式是一种特殊类型的表达式,因此它有自己的 CodeDOM 类型:

new CodeAttributeDeclaration(
"FaultContract",
new CodeAttributeArgument(new CodeTypeOfExpression("Collection<MyFault>")))

要查看 CodeDOM 中可用的所有表达式类型的列表,请查看 the inheritance hierarchy in the docs of CodeExpression .

关于c# - CodeDom 中方法的复杂属性声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25191077/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com