2017-04-23 48 views
0

我有以下json ..我将我的json转换为objectclass并获得了subjectid和class id循环,但它不工作。我想subjectid和CLASSID请帮助我如何干这事我在C#中新请帮助我,我很thanful给你们如何将json转换为对象并获取数据循环

[{ 
    "teacherid": 1, 
    "teachername": "Addi Teacher", 
    "class": {  
     "class_id": 2,  
     "class_name": "Class 9" 
    }, 
    "subjecname": { 

     "subject_id": 2,   
     "Subject_Name": "chemistry" 
    }, 
    "$$hashKey": "object:10" 
}, { 
    "teacherid": 1, 
    "teachername": "Addi Teacher", 
    "class": {  
     "class_id": 2,  
     "class_name": "Class 9" 
    }, 
    "subjecname": { 
     "subject_id": 4,   
     "Subject_Name": "Science" 
    }, 
    "$$hashKey": "object:12" 
}, { 
    "teacherid": 1, 
    "teachername": "Addi Teacher", 
    "class": { 

     "class_id": 2,  
     "class_name": "Class 9" 
    }, 
    "subjecname": { 

     "subject_id": 3,   
     "Subject_Name": "P.Study" 
    }, 
    "$$hashKey": "object:14" 
}] 


//c# class 
public class Class 
{ 
    public int class_id { get; set; } 
    public string class_name { get; set; } 
} 

public class Subjecname 
{ 
    public int subject_id { get; set; } 
    public string Subject_Name { get; set; } 
} 

public class RootObject 
{ 
    public int teacherid { get; set; } 
    public string teachername { get; set; } 
    public Class @class { get; set; } 
    public Subjecname subjecname { get; set; } 
    public string __invalid_name__$$hashKey { get; set; } 
} 

// code 
    subjectobject objsub = new JavaScriptSerializer().Deserialize<subjectobject>(jsonstring); 

enter image description here

+0

什么你遇到的问题?反序列化是否正常工作,你只是不知道如何获得这些属性? – CodingYoshi

+0

如何获得主题标识一些时间6 subjectid一些时间8 ..如何获得主题标识循环通过 –

+1

如果您使用的是NewtonSoft.Json,那么您需要编写下面的代码。 'var obj = JsonConvert.DeserializeObject (“你的json”);'。这将去序列化成RootObject类对象的数组。 –

回答

0

执行以下步骤来实现你所需要的:

  1. 使用我的回答here为您的JSON生成C#类。您手动创建的那个不能准确反映您的JSON。
  2. 使用NewtonSoft NuGet包从json反序列化到C#类型
  3. 然后使用Linq或循环获取您需要的属性。

这里是你R代码里面会是什么样子:

var obj = JsonConvert.DeserializeObject<Rootobject>("your json"); 
var result = obj.Property1.Select(x => 
    new { ClassId = x._class.class_id, SubjectId = x.subjecname.subject_id }); 

顺便说一句,这是我的链接的答案将为您生成:

public class Rootobject 
{ 
    public Class1[] Property1 { get; set; } 
} 

public class Class1 
{ 
    public int teacherid { get; set; } 
    public string teachername { get; set; } 
    public Class2 _class { get; set; } 
    public Subjecname subjecname { get; set; } 
    public string hashKey { get; set; } 
} 

public class Class2 
{ 
    public int class_id { get; set; } 
    public string class_name { get; set; } 
} 

public class Subjecname 
{ 
    public int subject_id { get; set; } 
    public string Subject_Name { get; set; } 
} 
+0

感谢您的帮助,但它的显示错误附加信息:无法反序列化当前的JSON数组(例如[1,2,3])到类型'SMSystem.Rootobject',因为类型需要一个JSON对象(例如{“name”:“value”})来正确地反序列化。 –

+0

@AddiKhan您是否按照我所述的方法执行了所有步骤? – CodingYoshi

+0

其工作.....如果您使用的是NewtonSoft.Json,那么您需要编写以下代码。 var obj = JsonConvert.DeserializeObject (“your json”);.这将去序列化成RootObject类对象的数组。 - –