我在 dotnet 核心应用程序中收到一个正文,其中一个字段可以是随机 JSON。为了简单起见,我决定使用动态类型(我直接将其保存在数据库中,而不必弄乱它)。
我需要确保该字段存在,它代表一个有效的 JSON 对象。
由于动态对象的工作方式与 JSON 对象非常相似,我是否可以假设任何 C# 动态对象都是有效的 JSON?
由于动态对象的工作方式与 JSON 对象非常相似,我是否可以假设任何 C# 动态对象都是有效的 JSON?
简短的回答:没有。
更长的答案:您问题的第一部分表明您对dynamicC# 中的含义有一个非常非常错误的想法。 dynamic只是意味着“将此程序片段的分析推迟到运行时;分析它,就好像对象的运行时类型是它的编译时类型”。
dynamic在 C# 中,您甚至不需要任何像 JSON 对象这样模糊的东西:
class Foo { public void M() { }}
class Bar { public void M() { }}
...
object o = X() ? (object) new Foo() : (object) new Bar();
o.M(); // Illegal.
dynamic d = o;
d.M(); // Legal; calls either Foo.M or Bar.M
Run Code Online (Sandbox Code Playgroud)
不涉及 JSON。而是由编译器dynamic替换object为 的类型d,d.M()直到运行时才进行分析以确定它是否具有方法M;d.M()无法在编译时分析的事实被抑制。
简而言之:dynamic就是object戴着一顶有趣的帽子。您不能对 做出任何假设,dynamic除非您也可以对object.