gpt4 book ai didi

c# - 解析匿名类型

转载 作者:行者123 更新时间:2023-12-04 21:01:22 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Return/consume dynamic anonymous type across assembly boundaries

(5 个回答)


去年关闭。




我的 API 返回 object , 填充了匿名类型。我可以 GET它通过 HTTP 解析为 json。
但是......我对同一方法的单元测试无法解析匿名类型。
使用 Dotnet 框架 4.7.2。
下面的代码显示了一个项目中的调用者
和被调用者,在另一个项目中,
有 2 次不同的失败尝试。
第二个是 copied from SOhere没有评论它不起作用。但是……不适合我。
错误信息是:

System.InvalidCastException : Unable to cast object
of type '<>f__AnonymousType1`2[System.String,System.String]'
to type '<>f__AnonymousType0`2[System.String,System.String]'.


在哪里可以看到类型是不同的。
但是 IIRC 前段时间有一个 dotnet 更新解决了这个问题,让它们“平等”。

我试图通过从 dotnet 框架 web api 返回匿名类型来解决用例。
(还有其他解决方案,如动态、反射、类型或更多端点,但这是另一个问题)
请注意,此测试用例不涉及 HTTP,它纯粹是 dotnet 框架问题。
WebAPI(项目1):
public class MyController: ApiController
{
public object Get(string id)
{
return new { Key = id, Value = "val:" + id };
}
}
测试(项目 2):
[Fact]
public void MyTest
{
var sut = new MyController();

// Act.
dynamic res = sut.Get("42");

// Assert.

// First attempt:
Assert.Equal("42", res.Key);

// Second attempt:
var a = new { Key = "", Value = "" };
a = Cast(a, res); // <- the code fails already here

Assert.Equal("42", a.Key);
}

private static T Cast<T>(T typeHolder, object x)
{
// typeHolder above is just for compiler magic
// to infer the type to cast x to
return (T)x;
}


最佳答案

匿名类型不适用于任何涉及类型测试的场景,尤其是在程序集之间。在某些情况下,值元组(或类元组,因为值元组无论如何都会在这里装箱)可能对您有用,或者您可以定义真正的正确类型。

否则:可以通过反射查看形状来测试匿名类型(或任何类型)(它是否具有 X/Y/Z 特征?) - 但不对实际运行时类型进行测试。

关于c# - 解析匿名类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59874640/

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