【问题标题】:Specify the name of a property in an anonymous type?在匿名类型中指定属性的名称?
【发布时间】:2016-02-17 14:44:20
【问题描述】:

在 web api 中,我返回匿名类型,如下所示:

return Request.CreateResponse(HttpStatusCode.OK, new
{
    SomeNameHere = new {Message = "my message"}
});

我正在尝试编写这样的扩展方法:

public static class RequestExtensions
    {
        public static HttpResponseMessage CreateMyResponse(
            this HttpRequestMessage httpRequestMessage,
            HttpStatusCode statusCode, 
            string wrapper, 
            string message)
        {
            return httpRequestMessage.CreateResponse(statusCode, new
            {
                wrapper = new
                {
                    Message = message
                }
            });
        }
    }

它会被这样调用:

return Request.CreateMyResponse(HttpStatusCode.OK, "SomeCommand", "some message");

但是,当我运行它并在邮递员中测试端点时,这就是我得到的结果:

{ “包装”:{ "消息": "一些消息" } }

我明白为什么这不起作用,我只是想找到一个可以正确返回它的替代解决方案:

{ “一些命令”:{ "消息": "一些消息" } }

我意识到我可以制作这个对象并以这种方式返回它,但是我不想像这样一次性创建一大堆新对象。任何帮助深表感谢。谢谢。

【问题讨论】:

    标签: asp.net-web-api extension-methods anonymous-types


    【解决方案1】:

    看起来使用 ExpandoObject 会起作用!

    public static HttpResponseMessage CreateWrappedResponse(
        this HttpRequestMessage httpRequestMessage,
        HttpStatusCode statusCode,
        string rootTagName,
        string message)
    {
        dynamic messageObject = new ExpandoObject();
        dynamic wrapperObject = new ExpandoObject();
    
        var messageDictionary = (IDictionary<string, object>)messageObject;
        messageDictionary.Add("Message", message);
        var wrapperDictionary = (IDictionary<string, object>)wrapperObject;
        wrapperDictionary.Add(rootTagName, messageDictionary);
    
        return httpRequestMessage.CreateResponse(statusCode, wrapperDictionary);
    }
    

    我可以这样调用扩展方法:

    return Request.CreateWrappedResponse(HttpStatusCode.OK, "SomeCommand", "some message");
    

    这将像我想要的那样在邮递员中返回我的 json:

    { "SomeCommand": { "Message": "some message" } }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多