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

时间:2015-05-12 10:23:50

标签: javascript c# json model-view-controller json.net

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

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

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

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

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

我无法做到

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

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

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

3 个答案:

答案 0 :(得分:2)

使其正常工作的一种简单方法是使用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

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

DECLARE @startingDate DATETIME, @searchDate DATETIME;
DECLARE  @maxSoFar INT, @sum INT, @daysRange INT;
SET @startingDate = convert(datetime, '20150401', 110)
SET @searchDate = @startingDate;
SET @daysRange = 3;
SET @maxSoFar = 0;

WHILE GETDATE()> @searchDate
BEGIN
    --PRINT @searchDate
    --PRINT DATEADD(DAY,@daysRange,@searchDate)
    SELECT @sum = SUM(SumAmount) FROM MyTable WHERE FileDate >= @searchDate AND FileDate <= DATEADD(DAY,@daysRange,@searchDate)
    IF @sum > @maxSoFar
    BEGIN
        SET @maxSoFar = @sum;
    END
    SET @searchDate = DATEADD(DAY,1,@searchDate)
END