如果名称略有不同,我该如何使用 JObject?

How do I use JObject if the names are slightly different?

我有一个来自 JSON.NET 的 JObject,其中包含以下内容:

var jOBject =  {"schedule.ID" : 1, "schedule.Name" : "NameSchedule"}

以上是我在视图中使用 Javascript 到 return 的 MVC 表单中文本框的 ID 和值得到的结果。

在我使用 C# 的控制器中,我想将其转换为具有以下属性的计划对象:

public class Schedule {
     public int ID {get;set;}
     public string Name {get;set;}
 }

我做不到

Schedule sched = jsonObject.toObject<Schedule>();

因为名称略有不同,因为 Jobject 上的属性前缀为 'schedule'。

是否有查询或方法可以让我删除 jsonObject 中的 'schedule',这样我就可以在一行中进行简单的转换?

要在 JSON 中使用不同的键名,您可以使用 DataContractDataMember 属性修饰 C# class。

[DataContract]
public class Schedule {
     [DataMember("schedule.ID")]
     public int ID { get; set; }

     [DataMember("schedule.Name")]
     public string Name { get; set; }
 }

让它工作的一个简单方法是使用 JsonProperty attribute 指定要映射到特定 C# 的 JSON 键 属性:

public class Schedule 
{
     [JsonProperty("schedule.ID")]
     public int ID {get;set;}

     [JsonProperty("schedule.Name")]
     public string Name {get;set;}
}

然后您可以使用 JsonConvert.DeserializeObject 将您的 JSON 反序列化为 Schedule 实例:

var schedule = JsonConvert.DeserializeObject<Schedule>(json);

示例: https://dotnetfiddle.net/Nml9be

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));
            }