提问人:bilpor 提问时间:11/17/2023 最后编辑:dbcbilpor 更新时间:11/17/2023 访问量:73
Newtonsoft JSON 序列化为小驼峰大小写的问题
Issue with Newtonsoft JSON Serialization to Lower Camel Case
问:
我目前在使用 C# 中的 Newtonsoft JSON 序列化将对象属性转换为小驼峰大小写时遇到困难。这是我正在使用的代码的简化版本:
[JsonObject(Title = "booking")]
public class BookingJsonModel
{
[JsonProperty("id")]
public Guid Id { get; set; }
[JsonProperty("reference")]
public string Reference { get; set; } = null!;
//...
}
我还尝试声明一个属性:
[JsonProperty(PropertyName = "reference")]
public string Reference { get; set; } = null!;
在序列化过程中,我尝试使用以下代码将属性名称转换为小驼峰大小写:
JsonSerializerSettings settings = new JsonSerializerSettings();
settings.Formatting = Formatting.Indented;
settings.ContractResolver = new CamelCasePropertyNamesContractResolver();
string body = JsonConvert.SerializeObject(data, settings);
尽管将 ContractResolver 设置为 ,但属性保持不变,并且仍以大写字母开头。在序列化过程中,似乎同时忽略了 ContractResolver 和 JsonProperty 属性。CamelCasePropertyNamesContractResolver()
有人可以提供指导或建议一种替代方法来确保使用 C# 中的 Newtonsoft JSON 库将对象属性序列化为小驼峰大小写吗?对此问题的任何见解或解决方案将不胜感激。谢谢!
答:
这
[JsonProperty("some name")]
public string SomeName {get;set;}
将原始 JSON 字符串中的属性名称“some name”映射到类定义中的 SomeName 属性。
如果已将类定义为使用属性名称“SomeName”,则模型上的大写字母是 JSON 将字符串映射到 INTO 的内容。
如果您希望自己的模型具有小写单词,只需这样定义您的模型即可。
所以它变成了
[JsonProperty("reference")]
public string reference {get;set;}
但是,这违反了正常的命名约定,即属性应以大写字母开头。
或者,使用
[JsonObject(NamingStrategyType = typeof(CamelCaseNamingStrategy))]
注释,这实际上应该解决您想要的问题。
评论
[JsonProperty = "some name"]
语法无效。此外,您提出的 [JsonProperty] 正是他们已经拥有的。最后,这与重命名 C# 属性无关。
如果在 C# 中使用 Newtonsoft.Json,并且想要将属性名称转换为小驼峰大小写(例如,myProperty 而不是 MyProperty),则可以通过使用 ContractResolver 属性配置 JsonSerializerSettings 来实现此目的。
下面是如何配置 Newtonsoft.Json 以序列化具有小驼峰大小写属性名称的对象的示例:
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
class Program
{
static void Main()
{
// Your object to serialize
var myObject = new MyClass { MyProperty = "SomeValue", AnotherProperty = 42 };
// Configure JsonSerializerSettings with CamelCasePropertyNamesContractResolver
var settings = new JsonSerializerSettings
{
ContractResolver = new CamelCasePropertyNamesContractResolver(),
Formatting = Formatting.Indented // Optional: for pretty-printing the JSON
};
// Serialize the object to JSON with lower camel case property names
string json = JsonConvert.SerializeObject(myObject, settings);
// Output the JSON
Console.WriteLine(json);
}
}
public class MyClass
{
public string MyProperty { get; set; }
public int AnotherProperty { get; set; }
}
评论
JsonProperty
Newtonsoft.Json
System.Text.Json
CamelCasePropertyNamesContractResolver
JsonProperty