私は、メッセージを送信するためにMass Transitを使用しています。JSon例外自己参照ループ
public class Node
{
public Node Parent;
public string Name;
public List<Node> Nodes = new List<Node>();
}
public class Portfolio : MessageBase
{
public string Name;
public List<Node> Nodes = new List<Node>();
}
public class TreeUpdateRequest:MessageBase
{
// just request
}
public class TreeUpdateResponse : MessageBase
{
public Portfolio Portfolios;
}
私はツリー構造を送信しています。
public async Task Consume(ConsumeContext<TreeRequest> context)
{
// build tree
context.Respond(TreeResponse);
}
私は例外があります。
MassTransit.RabbitMqTransport.Transport.RabbitMqSendTransport Error: 0 : Send Fault: rabbitmq://vip-mnapptst-01/Dimon/bus-ZHUKOV16-MangoAppService.vshost-dyuyyynjq3sxywr8bdkegdq5fc?durable=false&autodelete=true, System.Runtime.Serialization.SerializationException: Failed to serialize message ---> Newtonsoft.Json.JsonSerializationException: Self referencing loop detected for property 'parent' with type 'Open.Mango.Messages.Orc.Node'. Path 'message.portfolios.nodes[14]'.
at er jsonWriter, Object value, Type objectType)
at Newtonsoft.Json.JsonSerializer.SerializeInternal(JsonWriter jsonWriter, Object value, Type objectType)
at MassTransit.Serialization.JsonMessageSerializer.Serialize[T](Stream stream, SendContext`1 context)
私はツリーノード自体が
a->a
を参照しているかどうかを確認しようとしていた。しかし、実際のデータは、これらの
を持っていない私は、いくつかのループがグラフにあると思いますlike
a-> a1-> .. an-> a 提案がありますか?
親は子を参照しており、子はその親を参照しています。これはループであり、jsonのシリアル化はできません。 –
あなたの質問にこれを再現可能にするのに十分な情報が含まれていないので、私は投票に参加しました。シリアライゼーション例外の原因となるデータ(またはその一部)を投稿した場合に役立つとは思いませんか?さもなければあなたの言葉(「実際のデータにはループはありません」)とあなたが使用したライブラリ(例外メッセージ)とを比較すると、ライブラリはおそらく正しく終わるでしょう。 – stakx
私はダウンボートを理解している人を理解しています。ページを閉じるだけです。なぜ他人の評判を台無しにするのか? –