C# Linq查询作业对象
我使用Json.net进行序列化,然后制作一个JObject,如下所示:C# Linq查询作业对象,c#,json,linq,asp.net-mvc-4,json.net,C#,Json,Linq,Asp.net Mvc 4,Json.net,我使用Json.net进行序列化,然后制作一个JObject,如下所示: "RegistrationList": [ { "CaseNumber": "120654-1330", "Priority": 5, "PersonId": 7, "Person": { "FirstName": "", "LastName": "", }, "UserId": 7, "User"
"RegistrationList": [
{
"CaseNumber": "120654-1330",
"Priority": 5,
"PersonId": 7,
"Person": {
"FirstName": "",
"LastName": "",
},
"UserId": 7,
"User": {
"Id": 7,
"CreatedTime": "2013-07-05T13:09:57.87",
"Comment": "",
},
public static class JsonHelpers
{
public static JToken QueryJson(this object jsonObject, params string[] jsonPath)
{
const string separator = " -> ";
if (jsonObject == null)
throw new Exception(string.Format("Can not perform JSON query '{0}' as the object is null.",
string.Join(separator, jsonPath ?? new string[0])));
var json = (jsonObject as JToken) ?? JObject.FromObject(jsonObject);
var token = json;
var currentPath = "";
if (jsonPath != null)
foreach (var level in jsonPath)
{
currentPath += level + separator;
token = token[level];
if (token == null) break;
}
if (token == null)
throw new Exception(string.Format("Can not find path '{0}' in JSON object: {1}", currentPath, json));
return token;
}
}
如何将其查询到一个新的对象或列表中,该对象或列表很容易放入一些html表/视图中。
我只想显示案例编号、名字和注释
var serializer = new JavaScriptSerializer();
object modelData = serializer.DeserializeObject(jsonstring);
var serializer=新的JavaScriptSerializer();
object modelData=serializer.DeserializeObject(jsonstring);
我只想显示案例编号、名字和注释
var serializer = new JavaScriptSerializer();
object modelData = serializer.DeserializeObject(jsonstring);
与往常一样,在ASP.NET MVC中,您可以从编写符合您需求的视图模型开始:
public class MyViewModel
{
public string CaseNumber { get; set; }
public string FirstName { get; set; }
public string Comment { get; set; }
}
然后,在控制器操作中,从已有的JObject实例构建视图模型:
public ActionResult Index()
{
JObject json = ... the JSON shown in your question (after fixing the errors because what is shown in your question is invalid JSON)
IEnumerable<MyViewModel> model =
from item in (JArray)json["RegistrationList"]
select new MyViewModel
{
CaseNumber = item["CaseNumber"].Value<string>(),
FirstName = item["Person"]["FirstName"].Value<string>(),
Comment = item["User"]["Comment"].Value<string>(),
};
return View(model);
}
public ActionResult Index()
{
JObject json=…问题中显示的json(修复错误后,因为问题中显示的是无效的json)
IEnumerable模型=
来自(JArray)json[“RegistrationList”]中的项
选择新的MyViewModel
{
CaseNumber=项目[“CaseNumber”]。值(),
FirstName=项目[“个人”][“名字”]。值(),
注释=项[“用户”][“注释”]。值(),
};
返回视图(模型);
}
最后,在强类型视图中显示所需的信息:
@model IEnumerable<MyViewModel>
<table>
<thead>
<tr>
<th>Case number</th>
<th>First name</th>
<th>Comment</th>
</tr>
</thead>
<tbody>
@foreach (var item in Model)
{
<tr>
<td>@item.CaseNumber</td>
<td>@item.FirstName</td>
<td>@item.Comment</td>
</tr>
}
</tbody>
</table>
@model IEnumerable
案件编号
名字
评论
@foreach(模型中的var项目)
{
@项目.案例编号
@item.FirstName
@项目.评论
}
我认为您希望获得如下所示的JSON字符串:
{
'RegistrationList': [
{
'CaseNumber': '120654-1330',
'Priority': 5,
'PersonId': 7,
'Person': {
'FirstName': '0',
'LastName': '',
},
'UserId': 7,
'User': {
'Id': 7,
'CreatedTime': '2013-07-05T13:09:57.87',
'Comment': ''
}
},
{
'CaseNumber': '120654-1330',
'Priority': 5,
'PersonId': 7,
'Person': {
'FirstName': '0',
'LastName': '',
},
'UserId': 7,
'User': {
'Id': 7,
'CreatedTime': '2013-07-05T13:09:57.87',
'Comment': ''
}
},
]
}
如果是这样,您可以获得以下代码来解决您的问题:
string json = @"{
'RegistrationList': [
{
'CaseNumber': '120654-1330',
'Priority': 5,
'PersonId': 7,
'Person': {
'FirstName': '0',
'LastName': '',
},
'UserId': 7,
'User': {
'Id': 7,
'CreatedTime': '2013-07-05T13:09:57.87',
'Comment': ''
}
},
{
'CaseNumber': '120654-1330',
'Priority': 5,
'PersonId': 7,
'Person': {
'FirstName': '0',
'LastName': '',
},
'UserId': 7,
'User': {
'Id': 7,
'CreatedTime': '2013-07-05T13:09:57.87',
'Comment': ''
}
},
]
}";
JObject o = JObject.Parse(json);
JArray list = (JArray)o["RegistrationList"];
List<Tuple<string, string, string>> rList = new List<Tuple<string, string, string>>();
foreach (var r in list)
{
Tuple<string, string, string> temp = new Tuple<string, string, string>(r["CaseNumber"].Value<string>(), r["Person"]["FirstName"].Value<string>(), r["User"]["Comment"].Value<string>());
rList.Add(temp);
Console.WriteLine(temp);
}
stringjson=@”{
“注册列表”:[
{
‘案件编号’:‘120654-1330’,
"优先":5,,
“PersonId”:7,
“人”:{
“FirstName”:“0”,
“姓氏”:“,
},
“用户ID”:7,
“用户”:{
Id:7,,
“CreatedTime”:“2013-07-05T13:09:57.87”,
“评论”:”
}
},
{
‘案件编号’:‘120654-1330’,
"优先":5,,
“PersonId”:7,
“人”:{
“FirstName”:“0”,
“姓氏”:“,
},
“用户ID”:7,
“用户”:{
Id:7,,
“CreatedTime”:“2013-07-05T13:09:57.87”,
“评论”:”
}
},
]
}";
JObject o=JObject.Parse(json);
JArray列表=(JArray)o[“注册列表”];
List rList=新列表();
foreach(列表中的var r)
{
Tuple temp=new Tuple(r[“CaseNumber”].Value(),r[“Person”][“FirstName”].Value(),r[“User”][“Comment”].Value());
rList.Add(温度);
控制台写入线(临时);
}
有几种方法:
1) 根据文档“”,您可以使用LINQ方式查询JObject
JObject o = JObject.Parse(@"{
'CPU': 'Intel',
'Drives': [
'DVD read/writer',
'500 gigabyte hard drive'
]
}");
string cpu = (string)o["CPU"];
// Intel
string firstDrive = (string)o["Drives"][0];
// DVD read/writer
IList<string> allDrives = o["Drives"].Select(t => (string)t).ToList();
// DVD read/writer
// 500 gigabyte hard drive
这只给了我一个新的对象来处理,没有查询。查询javascript对象更容易吗?