C# 字符串和动态对象之间的歧义
在这段代码中,searchUrl是一个字符串,包含我正在使用的API的URL。现在,最后一行返回dataObject.langs.code;返回null,因为dataObjecta动态对象中的json中没有此类条目。但返回dataObject.langs.ru;返回我期望的正确字符串C# 字符串和动态对象之间的歧义,c#,json,dynamic,deserialization,ambiguous,C#,Json,Dynamic,Deserialization,Ambiguous,在这段代码中,searchUrl是一个字符串,包含我正在使用的API的URL。现在,最后一行返回dataObject.langs.code;返回null,因为dataObjecta动态对象中的json中没有此类条目。但返回dataObject.langs.ru;返回我期望的正确字符串 这是因为返回dataObject.langs.code;代码是dataObject的动态成员,而不是我上面声明的字符串代码。我如何使用我声明的代码,而不是它认为存在于dataObject中的动态代码,因为它是动态的
这是因为返回dataObject.langs.code;代码是dataObject的动态成员,而不是我上面声明的字符串代码。我如何使用我声明的代码,而不是它认为存在于dataObject中的动态代码,因为它是动态的。我根本不会使用动态。当您知道要在编译时使用的名称时,这通常非常有用。我将反序列化到一个JObject,只使用索引器,您可以使用编译时知道的东西(如langs)或只在执行时知道的东西(如代码)提供属性名: 下面是一个完整的示例:
var dataObject = JObject.Parse(json);
// Modify this to cast to whatever type you're actually interested in
return (string) dataObject["langs"][code];
test.json包含:
using System;
using System.IO;
using Newtonsoft.Json.Linq;
class Test
{
static void Main()
{
string json = File.ReadAllText("test.json");
string code = "ru";
JObject dataObject = JObject.Parse(json);
string result = (string) dataObject["langs"][code];
Console.WriteLine(result);
}
}
输出:
{
"langs": {
"ru": "Russian",
"en": "English",
"fr": "French"
},
"misc": {
"foo": "bar"
}
}
当您知道要在编译时使用的名称时,这通常很有用。-你的意思是不知道名字吗?@Enigmativity:不,我的意思就是我写的东西。动态类型让我们编写动态d=。。。;字符串结果=d.Foo;但是,如果您在编写代码时不知道Foo的名称,那么这对您没有帮助。我知道这听起来有点奇怪,但这就是它的工作方式。
{
"langs": {
"ru": "Russian",
"en": "English",
"fr": "French"
},
"misc": {
"foo": "bar"
}
}
Russian