Мне нужно использовать более старую версию Json.Net (наш ESB использует ее), которая старше 4.5.2.Как я могу сериализовать и десериализовать динамику как IDictionary <string, object> в Json.Net
Существует утечка памяти для классов на основе DynamicObject.
Я использую 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 в состоянии Array приведет к недопустимому объекту JSON. Путь« $ values ». 3- Утечка памяти в старой версии Json.Net. Версия, которую мы так старательно видели, я вижу информацию об утечке в истории версий. – ozz
Легко сериализовать объект «как». У меня есть DynamicObject и ı хочу сериализовать его как IDictionary Он должен быть простым с помощью JsonConverter, но нет, я думаю, что мне что-то не хватает –
ozz