Newtonsoft JSON序列化到低 Camel 大小写问题

hmae6n7t  于 2023-11-20  发布在  其他
关注(0)|答案(2)|浏览(173)

我目前在C#中使用Newtonsoft JSON序列化将对象属性转换为小写 Camel 大小写时遇到了困难。下面是我使用的代码的简化版本:

  1. [JsonObject(Title = "booking")]
  2. public class BookingJsonModel
  3. {
  4. [JsonProperty("id")]
  5. public Guid Id { get; set; }
  6. [JsonProperty("reference")]
  7. public string Reference { get; set; } = null!;
  8. //...
  9. }

字符串
我也试着申报一项财产

  1. [JsonProperty(PropertyName = "reference")]
  2. public string Reference { get; set; } = null!;


在序列化过程中,我尝试使用以下代码将属性名转换为小写camel大小写:

  1. JsonSerializerSettings settings = new JsonSerializerSettings();
  2. settings.Formatting = Formatting.Indented;
  3. settings.ContractResolver = new CamelCasePropertyNamesContractResolver();
  4. string body = JsonConvert.SerializeObject(data, settings);


尽管将ContractResolver设置为CamelCasePropertyNamesContractResolver(),但属性保持不变,仍然以大写字母开头。看起来ContractResolver和JsonProperty属性在序列化过程中都被忽略了。
有人能提供指导或建议一种替代方法,以确保在C#中使用Newtonsoft JSON库将对象属性序列化为低驼峰大小写吗?对此问题的任何见解或解决方案都将不胜感激。谢谢!

guykilcj

guykilcj1#

  1. [JsonProperty("some name")]
  2. public string SomeName {get;set;}

字符串
将原始JSON字符串中的属性名称“some name”Map到类定义中的SomeName属性。
如果你已经定义了你的类来使用属性名“SomeName”,你的模型上的大写就是JSONMap字符串的内容。
如果您希望您自己的模型使用小写单词,那么只需将您的模型定义为小写。
因此成为

  1. [JsonProperty("reference")]
  2. public string reference {get;set;}


但是,这违反了正常的命名约定,即属性应以大写字母开头。
或用

  1. [JsonObject(NamingStrategyType = typeof(CamelCaseNamingStrategy))]


注解,这实际上应该解决你想要的。

展开查看全部
7nbnzgx9

7nbnzgx92#

如果您在C#中使用Newtonsoft.Json,并希望将属性名称转换为小写(例如,myProperty而不是MyProperty),则可以通过使用ContractResolver属性配置JsonSerializerSettings来实现。
下面是一个如何配置Newtonsoft.Json以序列化具有小写Camel大小写属性名称的对象的示例:

  1. using Newtonsoft.Json;
  2. using Newtonsoft.Json.Serialization;
  3. class Program
  4. {
  5. static void Main()
  6. {
  7. // Your object to serialize
  8. var myObject = new MyClass { MyProperty = "SomeValue", AnotherProperty = 42 };
  9. // Configure JsonSerializerSettings with CamelCasePropertyNamesContractResolver
  10. var settings = new JsonSerializerSettings
  11. {
  12. ContractResolver = new CamelCasePropertyNamesContractResolver(),
  13. Formatting = Formatting.Indented // Optional: for pretty-printing the JSON
  14. };
  15. // Serialize the object to JSON with lower camel case property names
  16. string json = JsonConvert.SerializeObject(myObject, settings);
  17. // Output the JSON
  18. Console.WriteLine(json);
  19. }
  20. }
  21. public class MyClass
  22. {
  23. public string MyProperty { get; set; }
  24. public int AnotherProperty { get; set; }
  25. }

字符串
See the reference output

展开查看全部

相关问题