我必须使用旧版本的Json.Net(我们的ESB使用它)比4.5.2早。我怎样才能序列化和反序列化动态作为IDictionary <string,object>在Json.Net
基于DynamicObject的类存在内存泄漏。
我使用Rick的为Expando类https://github.com/RickStrahl/Expando
我想序列化我为Expando对象的IDictionary和反序列化作为我为Expando对象
我试图用CustomJsonConverter你可以看到:
public class ExpandoConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return typeof(Expando).IsAssignableFrom(objectType);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
if (reader.TokenType == JsonToken.Null)
return null;
JObject jObject = JObject.Load(reader);
// It is easier to write readJson I will implement
throw new NotImplementedException();
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
var x = (value as Expando);
writer.WriteStartObject();
foreach (var item in x.GetProperties(true))
{
writer.WritePropertyName(item.Key);
serializer.Serialize(writer,item.Value);
writer.WriteEndObject();
}
writer.WriteEndObject();
}
但是我每次尝试实现WriteJson时都会出现奇怪的错误:
Token PropertyName in state Array would result in an invalid JSON object. Path '$values'.
有没有这样的(在WriteJson)没有简单的方法:
var dictionary= ExpandoToDictionary(expando);
serializer.Serialize(writer,dictionary);
1)什么版本的Json.NET? 2)*但是我每次尝试实现WriteJson时都会出现奇怪的错误* - 您得到了哪些错误?你期望得到什么? 3)*基于DynamicObject的类存在内存泄漏。* - 你的意思是Json.NET或其他内容泄漏吗? – dbc
1-版本早于4.5 2-其中之一是“状态数组中的Token PropertyName会导致无效的JSON对象,路径'$ values'。” 3-内存泄漏Json.Net的旧版本,我们使用的版本太旧,你可以看到,我可以看到版本历史中的泄漏信息 – ozz
它很容易序列化对象“为”。我有DynamicObject和ı想序列化为IDictionary <字符串,对象>它必须通过JsonConverter简单但不是,我想我错过了一些东西 – ozz