2016-04-05 4 views
2

Я хочу создать структуру json с вложенным объектом из моего объекта списка.Как создать структуру json из списка данных?

Это мой класс:

public class Employee 
{ 
    public int EmployeeId { get; set; } 
    public int Skillssetpoints { get; set; } 
    public string Name { get; set; } 
    public Nullable<System.DateTime> Date { get; set; } 
} 

public class EmployeeModel 
{ 
    public int EmployeeId { get; set; } 
    public List<int> Skillssetpoints { get; set; } 
    public string Name { get; set; } 
    public Nullable<System.DateTime> Date { get; set; } 
} 

отчеты, как это:

EmployeeId SkillssetPoints Date 
1    10    4/5/2016 16:12:12 
2    12    3/5/2016 17:12:12 
3    4    8/5/2016 8:12:12 
4    20    1/5/2016 2:12:12 

Это, как я получаю данные:

var data=context.Employee.Tolist(); 

После получения данных я хочу создать это json структура сверху данные используя EmployeeModel и возвращение:

Ожидаемый результат:

{"Date":"8-5-2016 08:12:12","SkillssetPoints":[4,10,12,20]} 

В поле Дата я бы Высшую дату, так и 8-5-2016SkillssetPoints будет упорядочить по возрастанию.

Как создать эту структуру json с моим EmployeeModel class ??

+0

Вы должны четко заявить, что хотите вернуть только одну запись, и вы хотите, чтобы кто-то рассказал вам, как отфильтровать список ваших сотрудников, чтобы он показывал только «самую высокую дату» – Ggalla1779

ответ

4

Добавить ссылку на пакет NuGet Newtonsoft.Json затем использовать ...

string result = JsonConvert.Serialize(data); 

Похоже, что вам нужно преобразовать данные в вашей БД в формате модели, делая проекцию первой затем сериализации результат ...

var groupedData = data 
    .GroupBy(s => s.EmployeeId) 
    .OrderBy(s => s.Date) 
    .Select(g => new EmployeeModel { 
     EmployeeId = g.Key, 
     Name = g.First().Name, 
     Date = g.First().Date, 
     Skillssetpoints = g.Select(s => s.Skillssetpoints).OrderBy(i => i).ToList() 
    }); 

Это должно произвести сбор этой модели ...

public class EmployeeModel 
{ 
    public int EmployeeId { get; set; } 
    public List<int> Skillssetpoints { get; set; } 
    public string Name { get; set; } 
    public DateTime? Date { get; set; } 
} 

... когда я делаю это ...

var data = new List<EmployeeModel> { 
    new EmployeeModel { EmployeeId = 1, Name = "Homer Simpson", Skillssetpoints = new List<int> { 1,2,3,4 }, Date = DateTime.Now }, 
    new EmployeeModel { EmployeeId = 2, Name = "Marge Simpson", Skillssetpoints = new List<int> { 1,2,3,4 }, Date = DateTime.Now }, 
    new EmployeeModel { EmployeeId = 3, Name = "Lisa Simpson", Skillssetpoints = new List<int> { 1,2,3,4 }, Date = DateTime.Now }, 
    new EmployeeModel { EmployeeId = 4, Name = "Bart Simpson", Skillssetpoints = new List<int> { 1,2,3,4 }, Date = DateTime.Now } 
}; 

var result = JsonConvert.SerializeObject(data); 

я получаю этот выход ...

[ 
    { 
     "EmployeeId": 1, 
     "Skillssetpoints": [1,2,3,4], 
     "Name": "Homer Simpson", 
     "Date": "2016-04-05T11:42:09.9126748+01:00" 
    }, 
    { 
     "EmployeeId": 2, 
     "Skillssetpoints": [1,2,3,4], 
     "Name": "Marge Simpson", 
     "Date": "2016-04-05T11:42:09.9126748+01:00" 
    }, 
    { 
     "EmployeeId": 3, 
     "Skillssetpoints": [1,2,3,4], 
     "Name": "Lisa Simpson", 
     "Date": "2016-04-05T11:42:09.9126748+01:00" 
    }, 
    { 
     "EmployeeId": 4, 
     "Skillssetpoints": [1,2,3,4], 
     "Name": "Bart Simpson", 
     "Date": "2016-04-05T11:42:09.9126748+01:00" 
    } 
] 
+0

Пожалуйста, просмотрите мой вопрос, как при использовании вашего решения дает Я выхожу так: [{}, {}] –

2

Укажите необходимые записи, группируя в конкретной области, а затем подготовить анонимный объект в требуемом шаблоне и сериализовать его для конечных результатов,

 var models = (from em in employeeModels 
         group em by em.ID into g 
         select new 
         { 
          Id = g.Key, 
          maxDate = g.Max(p => p.Date) 
         }).ToList(); 
     var result = new 
     { 
      date = prices.Max(p => p.maxDate), 
      SkillssetPoints = prices.Select(p => p.Id).ToList() 
     }; 

     var json = JsonConvert.SerializeObject(result); 

Вы получите JSON в шаблоне как

{ 
    "date": "2016-04-05T16:39:54.8420979+05:30", 
    "SkillssetPoints": [ 
     1, 
     2, 
     3 
    ] 
} 
2

Вы можете попытаться создать новый объект и сериализации, как показано ниже:

var result = JsonConvert.Serialize (new { 
    Date = context.Employee.Max(e => e.Date), 
    SkillssetPoints = context.Employee.Select(e => e.SkillssetPoints) 
})); 
1

я думаю, что вы можете попробовать это он прекрасно работает со мной.

public ActionResult GetCitiesWithBranches(int regionID) 
    { 
     var cities = 
      _context.Cities.Where(e => e.RegionCode == regionID) 
       .Select(e => new { ID = e.CityCode, Name = e.Name }) 
       .ToList(); 
     return Json(new { cities = cities }); 
    } 

и в представлении я использую, что:

var json = { regionID: data }; 
$.ajax({ 
      type: "POST", 
      url: '@Url.Action("GetCitiesWithBranches", "Admin")', 
      data: json, 
      dataType: "json", 
      error: function (xhr, status, error) { 
       //alert("error routine"); 
      }, 
      success: function (res) {      
       if (res.cities) { 

       } 
      } 
     }); 

Надежда, которая поможет ..

+0

Это работает в контроллере Web api: Json (new {cities = cities}); –

+0

Я не пробовал это в веб-контроллере api. –

+0

он отлично работает в моем приложении MVC –

2

Использование ньютон JSON, он доступен на NuGet и код очень легко.

using Newtonsoft.Json; 

var jsonList = JsonConvert.SerializeObject(context.Employee.Tolist()); 

Приветствия

2

Используйте Newton JSON из NuGet пакета и попробуйте этот код

Список lstEmp = новый список();

 for (int i = 1; i <= 4; i++) 
     { 
      Employee emp = new Employee(); 
      emp.EmployeeId = i; 
      emp.Name = "Name" + i; 
      emp.Skillssetpoints = i + 1; 
      emp.Date = DateTime.Now.AddDays(i); 
      lstEmp.Add(emp); 
     } 

     var data = lstEmp; 
     var result = new EmployeeModel 
     { 
      Date = data.Max(p => p.Date), 
      Skillssetpoints = data.Select(p => p.Skillssetpoints).ToList() 
     }; 

     var JsonData = JsonConvert.SerializeObject(new 
     { 
      Date = result.Date, 
      Skillssetpoints = result.Skillssetpoints 
     }); 

Приветствия

2

1) Установите Newtonsoft.Json пакет с помощью NuGet

2) добавить пространство имен на верхней

using Newtonsoft.Json; 

3) Добавить [JsonIgnore] на вершине свойств класса модели которые вы не хотите включать в json-преобразование

public class Employee 
{ 
    public int EmployeeId { get; set; } 
    public int Skillssetpoints { get; set; } 
    public string Name { get; set; } 
    public Nullable<System.DateTime> Date { get; set; } 
} 

public class EmployeeModel 
{ 
    [JsonIgnore] 
    public int EmployeeId { get; set; } 
    public List<int> Skillssetpoints { get; set; } 
    [JsonIgnore] 
    public string Name { get; set; } 
    public Nullable<System.DateTime> Date { get; set; } 
} 

4) Окончательный код ниже

var data = new List<Employee>(); 
     data.Add(new Employee { EmployeeId = 1, Skillssetpoints = 10, Date = Convert.ToDateTime("4/5/2016 16:12:12") }); 
     data.Add(new Employee { EmployeeId = 2, Skillssetpoints = 12, Date = Convert.ToDateTime("3/5/2016 17:12:12") }); 
     data.Add(new Employee { EmployeeId = 3, Skillssetpoints = 4, Date = Convert.ToDateTime("8/5/2016 8:12:12") }); 
     data.Add(new Employee { EmployeeId = 4, Skillssetpoints = 20, Date = Convert.ToDateTime("1/5/2016 2:12:12") }); 

     var highestDate = data.OrderByDescending(e => e.Date).First().Date; 
     var skillssetpointsList = data.Select(e => e.Skillssetpoints).ToList(); 


     EmployeeModel employeeModel = new EmployeeModel() 
     { 
      Date = highestDate, 
      Skillssetpoints = skillssetpointsList 
     }; 

     string jsonString = JsonConvert.SerializeObject(employeeModel); 

Теперь, jsonString = { "Skillssetpoints": [10,12,4,20], "Дата": "2016-05-08T08: 12: 12" }

Смежные вопросы