【发布时间】:2021-06-17 10:30:51
【问题描述】:
我有一个用于某个对象列表的 Json 字符串,这个 Json 字符串不包含我的对象的属性之一。我正在寻找一种在将 Json 字符串反序列化为对象时设置缺失属性值的方法。我有一个解决方法可以在反序列化完成后设置它,但如果我可以在反序列化时设置它,我会更喜欢它。
我尝试使用自定义 JsonConverter,但它不会作为一个单独的属性执行,而不是 Json 字符串的一部分,如果我可以在反序列化时在缺失的属性中注入值,任何其他方式也可以。
类
public class TestClass
{
[JsonConverter(typeof(InternalIDConverter))]
public int InternalID { get; set; }
public int IdRemittance { get; set; }
public string IDCountry { get; set; }
public string OperationAction { get; set; }
public bool BusinessToBusiness { get; set; }
}
自定义 JsonConverter
public class InternalIDConverter : JsonConverter
{
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
throw new NotImplementedException("Not implemented yet");
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
//Doing my work here
}
public override bool CanWrite
{
get { return false; }
}
public override bool CanConvert(Type objectType)
{
return false;
}
}
反序列化
private void button11_Click(object sender, EventArgs e)
{
string json = "[{\"IDCountry\":\"AK\",\"BusinessToBusiness\":false,\"IdRemittance\":2,\"OperationAction\":\"U\"},{\"IDCountry\":\"AK\",\"BusinessToBusiness\":true,\"IdRemittance\":14,\"OperationAction\":\"U\"}]";
var data = JsonConvert.DeserializeObject<List<TestClass>>(json);
}
【问题讨论】:
标签: c# .net json.net json-deserialization