确认属性名和json字段名都匹配,并标注好对应的属性类型。例如: public class Person { public string Name { get; set; } [JsonProperty("age")] //指定json中字段名 public int Age { get; set; } }
在序列化和反序列化时使用NewtonJson的序列化器和反序列化器,并配置好选项。例如:
var options = new JsonSerializerOptions
{
PropertyNamingPolicy = JsonNamingPolicy.CamelCase, //将属性名转为小驼峰式
WriteIndented = true //格式化输出json
};
//序列化
var jsonString = JsonSerializer.Serialize(person, options);
//反序列化
var person = JsonSerializer.Deserialize
如果仍然无法映射,则可以尝试自定义解析器。例如:
public class CustomJsonConverter : JsonConverter
public override Person Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
var obj = JsonSerializer.Deserialize(ref reader); //解析json元素
var name = obj.GetProperty("name").GetString(); //获取属性值并转换为Person对象
var age = obj.GetProperty("age").GetInt32();
return new Person { Name = name, Age = age };
}
public override void Write(Utf8JsonWriter writer, Person value, JsonSerializerOptions options)
{
writer.WriteStartObject();
writer.WriteString("name", value.Name);
writer.WriteNumber("age", value.Age);
writer.WriteEndObject();
}
}
//序列化
var jsonString = JsonSerializer.Serialize(person, typeof(Person), new JsonSerializerOptions
{
Converters = { new CustomJsonConverter() } //添加自定义解析器
});
//反序列化
var person = JsonSerializer.Deserialize
上一篇:部分属性未从服务器加载
下一篇:部分数值被传播到中间信号。