我正在尝试将一个对象序列化为camelCase,并且发现只有根级别的对象才被正确地驼峰化。低于根级别的所有内容都以PascalCase的形式出现。我正在使用Json.NET 12.0.3和.NET Framework 4.0编写控制台应用程序。
public class Deal
{
public string Id { get; set; }
public string Name { get; set; }
public List<PublicId> PublicIds { get; set; }
}
public class PublicId
{
public string IdType { get; set; }
public string Value { get; set; }
}
要序列化,我正在使用:
var json = JsonConvert.SerializeObject(deal, Formatting.Indented, new JsonSerializerSettings
{
DateFormatString = "yyyy-MM-dd",
ContractResolver = new CamelCasePropertyNamesContractResolver()
});
结果json看起来像:
{
"id": null,
"name": "Deal 1",
"publicIds": [
{
"IdType": "ID1",
"Value": "A12"
},
{
"IdType": "ID2",
"Value": "B12"
}
]
}
如您所见,IdType和Value的值未在camelCase中正确序列化,而是在PascalCase中序列化了。在某些情况下,我需要在默认的PascalCase和camelCase之间更改序列化,因此在序列化期间,我将无法使用JsonProperty批注来强制camelCase。另外,我想坚持使用Json.NET作为项目的唯一json库。
有一种干净的方法来获取我想要的东西吗?
答案 0 :(得分:0)
首先,我注意到您的Deal
类未初始化PublicIds
。在这种情况下,代码实际上应该抛出错误。
但是,您指定合同求解器CamelCasePropertyNamesContractResolver
的代码是正确的。
以下是控制台代码,似乎返回了正确的JSON
值。
public class Deal
{
public Deal()
{
PublicIds = new List<PublicId>();
}
public string Id { get; set; }
public string Name { get; set; }
public List<PublicId> PublicIds { get; set; }
}
public class PublicId
{
public string IdType { get; set; }
public string Value { get; set; }
}
然后在控制台中,如果尝试使用下面的代码似乎会产生所需的结果。
public static void Main()
{
var deal = new Deal();
deal.Name = "Deal 1";
deal.PublicIds.Add(new PublicId { IdType = "ID1", Value = "A12" });
deal.PublicIds.Add(new PublicId { IdType= "ID2", Value= "B12"});
var json = JsonConvert.SerializeObject(deal, Formatting.Indented, new JsonSerializerSettings
{
DateFormatString = "yyyy-MM-dd",
ContractResolver = new CamelCasePropertyNamesContractResolver()
});
Console.WriteLine(json);
Console.ReadLine();
}
通过代码输出:
{
"id": null,
"name": "Deal 1",
"publicIds": [
{
"idType": "ID1",
"value": "A12"
},
{
"idType": "ID2",
"value": "B12"
}
]
}