你能解释一下这段代码的行为吗:
namespace DynamicTesting
{
public interface IDynamicTargetBase
{
string Hello(int a);
}
public interface IDynamicTarget : IDynamicTargetBase
{
}
public class DynamicTarget : IDynamicTarget
{
public string Hello(int a)
{
return "Hello!";
}
}
public class Program
{
public static void Main(string[] args)
{
dynamic a = 123;
IDynamicTargetBase obj1 = new DynamicTarget();
obj1.Hello(a); // This works just fine
IDynamicTarget obj2 = new DynamicTarget();
obj2.Hello(a); // RuntimeBinderException "No overload for method 'Hello' takes '1' arguments"
}
}
}
Run Code Online (Sandbox Code Playgroud)
结果是:
[Microsoft.CSharp.RuntimeBinder.RuntimeBinderException:在System.Dynamic.UpdateDelegates.UpdateAndExecuteVoid2 …
我正在使用 .net core 3.1 和库 System.Text.Json
如何将嵌套的 json 对象反序列化为 Dictionary<string, object>,但期望基于 json 属性类型我将获得正确的 C# 类型:
String -> string
Number -> int/double
Object -> Dictionary<string, object>
Run Code Online (Sandbox Code Playgroud)
默认情况下 - 如果我尝试反序列化为 Dictionary<string, object> - 基本上每个对象都是一个 JsonElement。我希望它是如上所述的类型。
知道如何实现吗?