为了重用使用Newtonsoft Json.NET的现有代码,我需要能够将流的整个json内容反序列化为“BadData”对象的单个属性。
示例:
public class BadDataEntity
{
[Key]
public int ID { get; set; }
public string BadData { get; set; }
}
我可以添加到这个类的属性组合,所以当我反序列化任何Json时,它作为字符串完成了BadData属性吗?
感谢。
答案 0 :(得分:0)
如果由于某种原因,必须使用Json.NET解析此类(而不是简单地将流读入字符串然后从中手动构建类),您可以创建{{3}将JSON加载到custom JsonConverter
然后将其字符串值存储到BadDataEntity
类中:
public class BadDataEntityConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return typeof(BadDataEntity).IsAssignableFrom(objectType);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
// Note that BadData MUST BE VALID JSON, otherwise this won't work.
var token = JToken.Load(reader);
var bad = (existingValue as BadDataEntity ?? new BadDataEntity());
bad.BadData = JsonConvert.SerializeObject(token, Formatting.Indented);
return bad;
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
var bad = (BadDataEntity)value;
if (bad.BadData == null)
writer.WriteNull();
else
{
var token = JToken.Parse(bad.BadData);
token.WriteTo(writer, serializer.Converters.ToArray());
}
}
}
请注意,该字符串必须包含有效的JSON。
然后您可以将转换器附加到您的班级,如下所示:
[JsonConverter(typeof(BadDataEntityConverter))]
public class BadDataEntity
{
[Key]
public int ID { get; set; }
public string BadData { get; set; }
}
或者将其放在JToken
列表中,如converters和documentation中所示。