2015-07-03 112 views
3

我想将一个JSON对象转换为C#数组。如何将Json对象转换为C#中的数组#

这是JSON我GETFROM服务器的WebRequest响应:

string result = sr.ReadToEnd(); // this line get me response 
result = { 
    "subjects": [{ 
     "subject_id": 1, 
     "subject_name": "test 1", 
     "subject_class": 4, 
     "subject_year": "2015", 
     "subject_code": "t-1" 
    },{ 
     "subject_id": 2, 
     "subject_name": "test 2", 
     "subject_class": 5, 
     "subject_year": "", 
     "subject_code": "t-2" 
    }] 
}; 

dynamic item = JsonConvert.DeserializeObject<object>(result); 

string iii = Convert.ToString(item["subjects"]); 

我想要得到的对象和数组中保存他们,所以我可以将它们用于其他用途。

我使用这些方法,但总是得到空值。

List<subjects> subject1 = (List<subjects>)JsonConvert.DeserializeObject(iii, typeof(List<subjects>)); 

subjects[] subject2 = JsonConvert.DeserializeObject<subjects[]>(iii); 

请帮我解决这个问题。

我的主题类是..

class subjects 
{ 
    public int id { get; set; } 
    public string name { get; set; } 
    public int class_name { get; set; } 
    public string year { get; set; } 
    public string code { get; set; } 
} 
+1

看看这个q:http://stackoverflow.com/questions/22007793/json-to-array-c-sharp –

回答

0

的属性名称不会按原样匹配,因为您的主题类没有JSON对象具有的'subject_'前缀。最简单的解决办法是改变你的财产名称,如阿里的答案所示。为了防止您需要保留属性名称,您还可以使用JsonProperty属性来更改序列化名称(可能有更通用的方法使用某种类型的转换器,但并不认为它需要的属性数量)

class subjects 
    { 
     [JsonProperty("subject_id")] 
     public int id { get; set; } 
     [JsonProperty("subject_name")] 
     public string name { get; set; } 
     [JsonProperty("subject_class")] 
     public int class_name { get; set; } 
     [JsonProperty("subject_year")] 
     public string year { get; set; } 
     [JsonProperty("subject_code")] 
     public string code { get; set; } 
    } 

如果你从来没有需要的根对象,你也可以像跳过它没有动态或额外的类:

subjects[] arr = JObject.Parse(result)["subjects"].ToObject<subjects[]>(); 

JObject是命名空间Newtonsoft.Json.Linq的一部分)

+0

谢谢男人。它解决了问题.... :-) –

0

您需要创建一个这样的结构:

public class Subjects 
{ 
    public List<Subject> subjects {get;set;} 
} 

public class Subject 
{ 
    public string subject_id {get;set;} 
    public string subject_name {get;set;} 
} 

那么你应该能够做到:

Subjects subjects = JsonConvert.DeserializeObject<Subject>(result); 
+0

...如果您需要将数据从此移动到其他数据结构中,例如一个数组,那么你需要编写逻辑来分开执行。 JSON为您获取价值,并解码JSON获取包含这些值的动态数据结构。 *你所做的*与价值完全取决于你:JSON已经完成了它的部分。 –

+0

答案提供了强类型对象,所以你应该在转换之前声明对象类型。我强烈建议这样做。但你可以将json转换为'dynamic'类型:看看这个页面:http://www.newtonsoft.com/json/help/html/QueryJsonDynamic.htm –

+0

是的。我*同意你的同意。 :-) –

相关问题