【发布时间】:2014-11-25 09:23:26
【问题描述】:
我使用Json.net的最新版本(6.0.6)序列化一个对象,在我看来,结果是不正确的。
下面c#示例的结果是这样的:
"Key":"AAA","No":"BBB","Project_No":"CCC","Resource_No":"DDD","Resource_Group_No":"EEE","Stadium_Code":"FFF","Entry_NoSpecified":false,"Line_NoSpecified":false,"Execution_DateSpecified":false,"HoursSpecified":false,"ExecutedSpecified":false,"FixedSpecified":false,"ConfirmedSpecified":false,"Begin_TimeSpecified":false,"Updated_TimeSpecified":false
如您所见,所有非字符串属性都没有序列化,例如 Entry_No、Line_No、Hours 和 dates
这是 Json.Net 中的错误吗?
重现问题的代码,
using System;
using Newtonsoft.Json;
namespace JSONNET
{
class Program
{
static void Main(string[] args)
{
var dto = new ProjectPlanningEntryDto()
{
Key = "AAA",
No = "BBB",
Entry_No = 123,
Project_No = "CCC",
Line_No = 456,
Resource_No = "DDD",
Resource_Group_No = "EEE",
Execution_Date = DateTime.Now,
Hours = 4,
Begin_Time = DateTime.Now,
Updated_Time = DateTime.Now,
Stadium_Code = "FFF"
};
var json = JsonConvert.SerializeObject(dto);
Console.WriteLine(json);
Console.ReadLine();
}
}
public class ProjectPlanningEntryDto
{
public string Key { get; set; }
public string No { get; set; }
public int Entry_No { get; set; }
public string Project_No { get; set; }
public int Line_No { get; set; }
public string Resource_No { get; set; }
public string Resource_Group_No { get; set; }
public DateTime Execution_Date { get; set; }
public decimal Hours { get; set; }
public bool Executed { get; set; }
public bool Fixed { get; set; }
public bool Confirmed { get; set; }
public DateTime Begin_Time { get; set; }
public DateTime Updated_Time { get; set; }
public string Stadium_Code { get; set; }
public bool Entry_NoSpecified { get; set; }
public bool Line_NoSpecified { get; set; }
public bool Execution_DateSpecified { get; set; }
public bool HoursSpecified { get; set; }
public bool ExecutedSpecified { get; set; }
public bool FixedSpecified { get; set; }
public bool ConfirmedSpecified { get; set; }
public bool Begin_TimeSpecified { get; set; }
public bool Updated_TimeSpecified { get; set; }
}
}
【问题讨论】:
-
如果您将(例如)Entry_NoSpecified 设置为 true 会发生什么?
-
嗯,如果我将 Entry_NoSpecified 设置为 true,则 Entry_No 字段将被序列化。这意味着指定的属性会调用我不知道的特殊行为?
-
在版本 4(2011 年 1 月)中,他们添加了 XmlSerializer 样式指定的属性支持。发现它潜伏在这些发行说明中并不显眼:james.newtonking.com/archive/2011/01/03/…