如果因任何原因,你必須解析使用Json.NET(而不是簡單地讀取流轉換爲字符串,然後手動從它建設類),您可以創建加載JSON成JToken
一個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; }
}
或者把它的converters列表,如在documentation和this question所示。
來源
2016-01-01 01:00:09
dbc
換句話說,你根本不想反序列化JSON。如果是這樣的話,你不需要Json.NET。只需將該流的內容作爲字符串獲取並在該對象上設置該屬性即可。 –
我有一個代碼將隊列中的消息反序列化爲實體並保存實體。如果可以,只使用配置,使用相同的進程指向死信隊列,使用不同的實體(BadRecords),並保留完整的Json而不必編寫單獨的服務,這將是理想的。 – wndproc