Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 字符串和动态对象之间的歧义_C#_Json_Dynamic_Deserialization_Ambiguous - Fatal编程技术网

C# 字符串和动态对象之间的歧义

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中的动态代码,因为它是动态的

在这段代码中,searchUrl是一个字符串,包含我正在使用的API的URL。现在,最后一行返回dataObject.langs.code;返回null,因为dataObjecta动态对象中的json中没有此类条目。但返回dataObject.langs.ru;返回我期望的正确字符串


这是因为返回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