我正在使用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
但實際的數據沒有這些
我覺得有在圖形部分的環像
a-> a1 - > .. an-> a 有什麼建議嗎?
父母正在引用孩子,孩子正在引用其父母。這是一個循環,不能被json序列化。 –
我投票結束,因爲您的問題沒有包含足夠的信息來使其具有可重複性。如果您發佈導致序列化異常的數據(或其中的一部分),您不認爲這會有所幫助嗎?否則,它只是你的詞(「但實際的數據沒有[循環]」)與你使用的庫(異常消息),並且這些庫可能最終是正確的。 – stakx
我不理解downvote的人。只需關閉頁面。爲什麼要破壞其他的聲譽? –