Javascript 如果名称略有不同,如何使用JObject?
我有一个来自JSON.NET的JObject,包含以下内容:Javascript 如果名称略有不同,如何使用JObject?,javascript,c#,json,model-view-controller,json.net,Javascript,C#,Json,Model View Controller,Json.net,我有一个来自JSON.NET的JObject,包含以下内容: var jOBject = {"schedule.ID" : 1, "schedule.Name" : "NameSchedule"} 以上是我从使用Javascript返回视图中MVC表单中文本框的ID和值中得到的 在使用C#的控制器中,我希望将其转换为具有以下属性的调度对象: public class Schedule { public int ID {get;set;} public string Nam
var jOBject = {"schedule.ID" : 1, "schedule.Name" : "NameSchedule"}
以上是我从使用Javascript返回视图中MVC表单中文本框的ID和值中得到的
在使用C#的控制器中,我希望将其转换为具有以下属性的调度对象:
public class Schedule {
public int ID {get;set;}
public string Name {get;set;}
}
我做不到
Schedule sched = jsonObject.toObject<Schedule>();
Schedule sched=jsonObject.toObject();
因为Jobject上的属性前面有“schedule”,所以名称略有不同
是否有一种查询或转换方法允许我删除jsonObject中的“schedule”,这样我就可以在一行中完成简单的转换 要在JSON中使用不同的键名,可以使用
DataContract
和DataMember
属性来修饰C#类
[DataContract]
public class Schedule {
[DataMember("schedule.ID")]
public int ID { get; set; }
[DataMember("schedule.Name")]
public string Name { get; set; }
}
一种简单的方法是使用指定要映射到某个C#属性的JSON键:
public class Schedule
{
[JsonProperty("schedule.ID")]
public int ID {get;set;}
[JsonProperty("schedule.Name")]
public string Name {get;set;}
}
然后,您可以使用JsonConvert.DeserializeObject
将JSON反序列化为计划
实例:
var schedule = JsonConvert.DeserializeObject<Schedule>(json);
var schedule=JsonConvert.DeserializeObject(json);
示例:我认为您应该标记
java
而不是javascript
“我有一个JSON示例对象,在javascript中包含以下内容:“这既不是有效的JSON,也不是有效的javascript”。@VigneswaranMarimuthu:不,那些类代码示例是C#,不是Java。JavaScript对象属性名中不能包含
字符,除非整个名称用引号括起来。您当前的示例抛出:Uncaught SyntaxError:Unexpected token
<代码>schedule.ID无效,“schedule.ID”
有效。@T.J.Crowder根本没有使用C。感谢您让我知道:)实际上,
是JSON对象的keyAh中完全有效的字符是的,您是正确的。但是,当我回答时,密钥名称周围没有引号,这将是无效的JSON。将编辑我的答案。
JObject scheduleObj={schedule:{"ID" : 1, "Name" : "NameSchedule"}}
JsonSerializer seria = new JsonSerializer();
Schedule oSchedule = new Schedule();
if (ScheduleObj["Schedule"] != null)
{
oSchedule = (Schedule)seria.Deserialize(new JTokenReader(ScheduleObj["Schedule"]), typeof(Schedule));
}