Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从数据列表创建json结构?_C#_.net_Json_Linq_Asp.net Web Api - Fatal编程技术网

C# 如何从数据列表创建json结构?

C# 如何从数据列表创建json结构?,c#,.net,json,linq,asp.net-web-api,C#,.net,Json,Linq,Asp.net Web Api,我想从我的列表对象创建带有嵌套对象的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; } } pu

我想从我的列表对象创建带有嵌套对象的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; }
}
这就是我获取数据的方式:

var data=context.Employee.Tolist();
获取数据后,我想使用
EmployeeModel
从上述数据创建这个json结构,并返回:

预期输出:

 {"Date":"8-5-2016 08:12:12","SkillssetPoints":[4,10,12,20]}
在日期字段中,我将选择最高日期,因此
8-5-2016
技能分数将按升序排列


如何使用myEmployeeModel创建此json结构???

添加对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 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
    ]
}

您可以尝试创建新对象并按如下方式序列化:

var result = JsonConvert.Serialize (new {
    Date = context.Employee.Max(e => e.Date),
    SkillssetPoints = context.Employee.Select(e => e.SkillssetPoints)
}));
我想你可以试试这个 它对我很管用

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) {

                }
            }
        });

希望这将有助于..

使用newton JSON,它在NuGet上可用,代码非常简单

using Newtonsoft.Json;

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

Cheers

使用Nuget软件包中的Newton JSON并尝试以下代码

List lstEmp=新列表()

for(int i=1;i p.Date),
Skillssetpoints=data.Select(p=>p.Skillssetpoints.ToList())
};
var JsonData=JsonConvert.SerializeObject(新
{
日期=结果。日期,
Skillssetpoints=结果。Skillssetpoints
});
干杯

1)使用NuGet安装Newtonsoft.Json包

2) 在顶部添加命名空间

 using Newtonsoft.Json;
3) 在不希望包含在json转换中的模型类属性之上添加[JsonIgnore]

 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; }
}
公共类员工
{
public int EmployeeId{get;set;}
公共int-Skillssetpoints{get;set;}
公共字符串名称{get;set;}
公共可空日期{get;set;}
}
公共类雇员模型
{
[JsonIgnore]
public int EmployeeId{get;set;}
公共列表技能集合点{get;set;}
[JsonIgnore]
公共字符串名称{get;set;}
公共可空日期{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);
var data=newlist();
data.Add(新员工{EmployeeId=1,Skillssetpoints=10,Date=Convert.ToDateTime(“4/5/2016 16:12:12”)));
data.Add(新员工{EmployeeId=2,Skillssetpoints=12,Date=Convert.ToDateTime(“3/5/2016 17:12:12”)));
data.Add(新员工{EmployeeId=3,Skillssetpoints=4,Date=Convert.ToDateTime(“8/5/2016 8:12:12”)));
data.Add(新员工{EmployeeId=4,Skillssetpoints=20,Date=Convert.ToDateTime(“1/5/2016 2:12:12”)));
var highestDate=data.OrderByDescending(e=>e.Date).First().Date;
var Skillssetpoints list=data.Select(e=>e.Skillssetpoints.ToList();
EmployeeModel EmployeeModel=新EmployeeModel()
{
日期=最高日期,
SKILLSETPOINTS=SKILLSETPOINTS列表
};
字符串jsonString=JsonConvert.SerializeObject(employeeModel);

现在,jsonString={“Skillssetpoints”:[10,12,4,20],“Date”:“2016-05-08T08:12:12”}

请查看我的问题,因为使用您的解决方案会给我这样的输出:[{},{}这在Web api控制器中有效吗:Json(new{cities=cities});我没有在web api控制器中尝试。您应该清楚地说明,您只希望返回1条记录,并且希望有人告诉您如何筛选员工列表,以便它只显示“最新日期”
        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
        });
 using Newtonsoft.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; }
}
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);