4.5.2より古い古いJson.Net(ESBが使用する)を使用する必要があります。Json.NetのIDictionary <文字列、オブジェクト>としてダイナミックをシリアル化および逆シリアル化する方法
DynamicObjectベースのクラスにメモリリークがあります。
私は私はあなたが見ることができるようCustomJsonConverterを使用しようとしましたIDictionaryのように私はExpandoオブジェクトをシリアル化し、私はExpandoオブジェクトとして
それをデシリアライズしたいリックのはExpandoクラスにhttps://github.com/RickStrahl/Expando
を使用しています:
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で)そのような任意の簡単な方法があります:あなたのコードと他の問題がある可能性がありmcveが存在しない場合には
var dictionary= ExpandoToDictionary(expando);
serializer.Serialize(writer,dictionary);
1)Json.NETのバージョンは? 2)*しかし、私はWriteJson *を実装しようとするたびに奇妙なエラーが発生しています* - どのようなエラーが出ていますか?代わりに何を得ることを期待しましたか? 3)* DynamicObjectベースのクラスのメモリリークがあります。* - Json.NETなどのリークを意味しますか? – dbc
1バージョンが4.5より古い2つのうちの1つが「状態配列のトークンPropertyNameは無効なJSONオブジェクトになります」パス '$ values'。 " 3 - Json.Netの古いバージョンでのメモリリーク、私が見たほど古くなったバージョン、バージョン履歴のリーク情報を見ることができます – ozz
"as"オブジェクトをシリアライズするのは簡単です。私はDynamicObjectを持っていて、ıIDictionaryとしてシリアライズしたいのですが、JsonConverter経由でシンプルでなければならないが、何かが足りないと思う。 –
ozz