【问题标题】:Deserializing Json var with json.net in c# relations在 c# 关系中使用 json.net 反序列化 Json var
【发布时间】:2026-01-08 11:20:03
【问题描述】:

我有一个 json 字符串,我正在尝试为 EmployeeId、EmployeeName 和日期创建一个 foreach:

{"$id":"1","Employee":{"$id":"2","RelationshipManager":{"$id":"3","_owner":{"$ref":"2"},"_relationships":[[{"$id":"4","Calendarbookings":null,"Id":1,"MId":1,"Startdate":"2011-01-14T00:00:00","Enddate":"2011-01-14T00:00:00","StartTime":"1899-12-30T10:00:00","Endtime":"1899-12-30T16:00:00","EmployeeId":1,"DebtorId":0,"Subject":"Tidevand Odense","Description":null,"AllDay":0,"Wwwaddress":"","Mailaddress":"","IsTeam":1,"IsRessource":0,"RessourceType":0,"Participants":1,"Department":0,"IsRepeating":0,"TaskType":0,"Categorytype":0,"Price":495.0,"WaitinglistIsEnabled":1,"Deadline":"2011-02-01T00:00:00","DeadlineForCancellation":"1899-12-30T00:00:00","Ending":"2011-01-14T00:00:00","OnlineEnabled":1,"Revenueaccount":1502,"Maxbooking":20,"Employee":{"$ref":"2"}}]]},"Id":1,"SearchKey":"","EmployeeName":"Erik Steen Larsen","Address1":"","Address2":"","Zip":"","City":"","Phone":"","CashSuper":"0","ActiveInCalendar":"1","Startdate":"1899-12-30T00:00:00","Enddate":"1899-12-30T00:00:00","Mobile":"30125744","Description":null,"Events":[{"$ref":"4"}]},"ErrorCode":0,"Status":0,"StatusString":"Okay","Message":null,"ApiVersion":"1.0.0.8"}

怎么做???

_jsonContent = JsonConvert.DeserializeObject(JSONSTRING);

foreach (var item in _jsonContent.Employee)
{
   littext.Text += item.EmployeeName;
   littext.Text += item.Id;
}

谢谢

【问题讨论】:

    标签: c# asp.net json serialization


    【解决方案1】:

    你可以使用动态对象来实现你想要的,就像这样:

            dynamic astring = "{\"$id\":\"1\",\"Employee\":{\"$id\":\"2\",\"RelationshipManager\":{\"$id\":\"3\",\"_owner\":{\"$ref\":\"2\"},\"_relationships\":[[{\"$id\":\"4\",\"Calendarbookings\":null,\"Id\":1,\"MId\":1,\"Startdate\":\"2011-01-14T00:00:00\",\"Enddate\":\"2011-01-14T00:00:00\",\"StartTime\":\"1899-12-30T10:00:00\",\"Endtime\":\"1899-12-30T16:00:00\",\"EmployeeId\":1,\"DebtorId\":0,\"Subject\":\"Tidevand Odense\",\"Description\":null,\"AllDay\":0,\"Wwwaddress\":\"\",\"Mailaddress\":\"\",\"IsTeam\":1,\"IsRessource\":0,\"RessourceType\":0,\"Participants\":1,\"Department\":0,\"IsRepeating\":0,\"TaskType\":0,\"Categorytype\":0,\"Price\":495.0,\"WaitinglistIsEnabled\":1,\"Deadline\":\"2011-02-01T00:00:00\",\"DeadlineForCancellation\":\"1899-12-30T00:00:00\",\"Ending\":\"2011-01-14T00:00:00\",\"OnlineEnabled\":1,\"Revenueaccount\":1502,\"Maxbooking\":20,\"Employee\":{\"$ref\":\"2\"}}]]},\"Id\":1,\"SearchKey\":\"\",\"EmployeeName\":\"Erik Steen Larsen\",\"Address1\":\"\",\"Address2\":\"\",\"Zip\":\"\",\"City\":\"\",\"Phone\":\"\",\"CashSuper\":\"0\",\"ActiveInCalendar\":\"1\",\"Startdate\":\"1899-12-30T00:00:00\",\"Enddate\":\"1899-12-30T00:00:00\",\"Mobile\":\"30125744\",\"Description\":null,\"Events\":[{\"$ref\":\"4\"}]},\"ErrorCode\":0,\"Status\":0,\"StatusString\":\"Okay\",\"Message\":null,\"ApiVersion\":\"1.0.0.8\"}";
    
            dynamic jsonContent = JsonConvert.DeserializeObject(astring);
    
            foreach (var item in jsonContent.Employee)
            {
                /*.,..*/
            }
    

    【讨论】:

      【解决方案2】:

      你也可以使用匿名对象

      var template = new { EmployeName = "", EmplyeeId = 0 };
      var jsonContent = JsonConvert.DeserializeAnonymousType(JSONSTRING, template);
      
       foreach (var item in jsonContent.Employee)
              {
                  /*.,..*/
              }
      

      【讨论】:

        【解决方案3】:

        Employee 里面的 json 不是一个数组。您还需要将 json 反序列化到适当的容器中。

        JObject:

        var jObject = JsonConvert.DeserializeObject<JObject>(json);
        
        var employeeId = (int) jObject["Employee"]["Id"];
        var employeeName = (string) jObject["Employee"]["EmployeeName"];
        

        动态:

        var jObject = JsonConvert.DeserializeObject<dynamic>(json);
        
        var employeeId = (int) jObject.Employee.Id;
        var employeeName = (string) jObject.Employee.EmployeeName;
        

        POCO:

        public class Record
        {
            [JsonProperty("Employee")]
            public Employee Employee { get; set; }
        }
        
        public class Employee
        {
            [JsonProperty("Id")]
            public int Id { get; set; }
        
            [JsonProperty("EmployeeName")]
            public string EmployeeName { get; set; }
        }
        
        var record = JsonConvert.DeserializeObject<Record>(json);
        
        var employeeId = record.Employee.Id;
        var employeeName = record.Employee.EmployeeName;
        

        【讨论】:

          最近更新 更多