/
vshmidt
/
masstransit
Обзор
Документация
Войти
/
vshmidt
/
masstransit
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
develop
src/MassTransit.Newtonsoft/Serialization/JsonExtensions.cs
50 строк
2 KB
Chris Patterson
Integration of all external packages into MassTransit, split out into Abstractions, Middleware, and the core MassTransit assembly.
22 янв 2022, 18:24
22 янв 2022, 18:24
b5b4f50
Код
Авторство
О чём код?
namespace MassTransit.Serialization { using Newtonsoft.Json.Linq; public static class JsonExtensions { public static void MergeInto(this JContainer left, JToken right) { foreach (var rightChild in right.Children<JProperty>()) { var rightChildProperty = rightChild; var path = string.Empty.Equals(rightChildProperty.Name) || rightChildProperty.Name.Contains(" ") ? $"['{rightChildProperty.Name}']" : rightChildProperty.Name; var leftProperty = left.SelectToken(path); if (leftProperty == null) { // no matching property, just add left.Add(rightChild); } else { var leftObject = leftProperty as JObject; if (leftObject == null) { // replace value var leftParent = (JProperty)leftProperty.Parent; leftParent.Value = rightChildProperty.Value; } else MergeInto(leftObject, rightChildProperty.Value); } } } public static JToken Merge(this JToken left, JToken right) { if (left.Type != JTokenType.Object) return right.DeepClone(); var leftClone = (JContainer)left.DeepClone(); MergeInto(leftClone, right); return leftClone; } } }