使用newtonsoft.json使用getType从json中检索值

时间:2015-10-31 18:37:41

标签: c# json

我喜欢这种方式,我如何在Java中做到这一点。只需:

JSONObject obj = ...; // got by some procedure
String val_1 = obj.getString("attr_1");
int val_2 = obj.getInt("attr_2");

但我不知道C#中是否有类似内容。在每行代码上进行类型转换都不是我想要的。 BTW。我正在使用newtonsoft.json

2 个答案:

答案 0 :(得分:2)

好的,除了@Kayani的回答: 我们假设您有以下json:

{  
  "AttributeOne":"TestString",
  "AttributeTwo":1000
}

C#中的相应类将是:

public class TestClass
{
    public String AttributeOne { get; set; }
    public Int32 AttributeTwo { get; set; }
}

所以你现在能做的就是:

TestClass obj = JsonConvert.DeserializeObject<TestClass>(str); //str = your json
String val_1 = obj.AttributeOne; //String
Int32 val_2 = obj.AttributeTwo; //Int

所以你不必每一行都进行投射。 如果仍然无法解决您的问题,您可以编写一些这样的扩展名:

public static class JObjectExtensions
{
    public static string GetString(this JObject obj, string property)
    {
        return obj[property].ToString();
    }

    public static int GetInt(this JObject obj, string property)
    {
        return (int)obj[property];
    }
}

并像这样使用它们:

JObject obj = JObject.Parse(str); //str == your json
String val_1 = obj.GetString("attr_1");
int val_2 = obj.GetInt("attr_2");
//or you just use the built in methods
String val_1 = obj.Value<String>("AttributeOne");
int val_2 = obj.Value<int>("AttributeTwo");

对于这些代码段,您需要导入(使用)Newtonsoft.JsonNewtonsoft.Json.Linq

答案 1 :(得分:1)

假设您有一个类似以下的json字符串:

{"question":"what is your name","A":"x","B":"y","C":"z","D":"a"}

这里我们在json字符串中有一个MCQ类型的问题。假设我们要检索其中一个属性,例如问题。我们要做的是创建一个具有以下属性的类: 问题,A,B,C,d。假设该类名为MyQuestion,我们将执行以下操作:

MyQuestion myQuestion = JsonConvert.DerserializeObject<MyQuestion>(jsonString);

现在您可以访问myQuestion对象的任何属性。 参考:JsonConvert