Casting anonymous type to dynamic

后端 未结 5 1230
渐次进展
渐次进展 2020-12-14 06:06

I have a function that returns an anonymous type which I want to test in my MVC controller.

public JsonResult Foo()
{
    var data = new
                  {
         


        
5条回答
  •  挽巷
    挽巷 (楼主)
    2020-12-14 06:37

    As suggested by @TrueWill and @Marc Gravell, who also referred to this blog post

    Since this is for unit testing, you could use InternalsVisibleTo. See Anonymous Types are Internal, C# 4.0 Dynamic Beware! Thanks to @MarcGravell for pointing out that anonymous objects are internal!

    Bottom line: Set up an [assembly: InternalsVisibleTo("foo")] mapping if you want to share an anonymous object from one assembly to another. In the OP case, it would be a matter of setting this in the MVC controller project, referring to the test project. In my specific case, the other way around (since I'm passing an anonymous object from my test project into the "production code" project).

    The easiest way in that "other project" to be able to use it is definitely to cast it to dynamic and then just use the properties like normal. It does work, no problems whatsoever.

    So, bottom line: I feel that Marc Gravell's answer is slightly incorrect; this can clearly be done
    (iff the projects in question are modifiable by you, so you can set up the InternalsVisibleTo mapping accordingly, and this does not pose a problem for whatever other reason).

提交回复
热议问题