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

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

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

[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!;


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

JsonSerializerSettings settings = new JsonSerializerSettings();
settings.Formatting = Formatting.Indented;
settings.ContractResolver = new CamelCasePropertyNamesContractResolver();

string body = JsonConvert.SerializeObject(data, settings);


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

guykilcj

guykilcj1#

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

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

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


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

[JsonObject(NamingStrategyType = typeof(CamelCaseNamingStrategy))]


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

7nbnzgx9

7nbnzgx92#

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

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; }
}

字符串
See the reference output

相关问题