如何将C#的UserResponse类对象转换为指定格式的驼峰命名JSON
解决方案
你需要满足两个序列化规则:1. 所有属性名输出为小驼峰格式;2. int/decimal等数值类型序列化时转为字符串格式。主流的两种C# JSON序列化库的实现方案如下:
方案1:使用官方自带的System.Text.Json(适用于.NET Core 3.0+ / .NET 5+)
步骤1:自定义数值转字符串的序列化转换器
using System.Text.Json; using System.Text.Json.Serialization; public class NumberToStringConverter : JsonConverter<object> { public override bool CanConvert(Type typeToConvert) { // 匹配需要转字符串的数值类型 return typeToConvert == typeof(int) || typeToConvert == typeof(decimal); } public override object Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { // 反序列化逻辑按需实现,仅序列化需求可跳过实现 throw new NotImplementedException(); } public override void Write(Utf8JsonWriter writer, object value, JsonSerializerOptions options) { writer.WriteStringValue(value.ToString()); } }
步骤2:配置序列化参数并执行序列化
// 配置序列化规则 var jsonOptions = new JsonSerializerOptions { // 启用小驼峰命名 PropertyNamingPolicy = JsonNamingPolicy.CamelCase, // 格式化美化输出,不需要可以删除 WriteIndented = true }; // 添加自定义数值转字符串转换器 jsonOptions.Converters.Add(new NumberToStringConverter()); // 示例对象实例化 var userResponse = new UserResponse { UserInfo = new User { Id = 1, FirstName = "John", LastName = "Doe", Balance = 1000m }, Age = "25", Gender = "Male", Message = "Hello" }; // 执行序列化得到目标JSON string jsonResult = JsonSerializer.Serialize(userResponse, jsonOptions);
方案2:使用Newtonsoft.Json(Json.NET)
步骤1:安装Newtonsoft.Json NuGet包后配置序列化规则
using Newtonsoft.Json; using Newtonsoft.Json.Serialization; // 配置序列化规则 var jsonSettings = new JsonSerializerSettings { // 启用小驼峰命名 ContractResolver = new CamelCasePropertyNamesContractResolver(), // 格式化美化输出,不需要可以删除 Formatting = Formatting.Indented }; // 全局配置int、decimal类型序列化时转为字符串 jsonSettings.Converters.Add(new JsonConverter<int>( (writer, value, serializer) => writer.WriteValue(value.ToString()), (reader, type, existingValue, hasExistingValue, serializer) => int.Parse(reader.Value.ToString()) )); jsonSettings.Converters.Add(new JsonConverter<decimal>( (writer, value, serializer) => writer.WriteValue(value.ToString()), (reader, type, existingValue, hasExistingValue, serializer) => decimal.Parse(reader.Value.ToString()) )); // 示例对象实例化和上述方案一致 var userResponse = new UserResponse { UserInfo = new User { Id = 1, FirstName = "John", LastName = "Doe", Balance = 1000m }, Age = "25", Gender = "Male", Message = "Hello" }; // 执行序列化得到目标JSON string jsonResult = JsonConvert.SerializeObject(userResponse, jsonSettings);
两种方案输出的JSON都完全匹配你要求的格式。
内容的提问来源于stack exchange,提问作者bmo
相关产品推荐
相关产品推荐

