Я использую очередь ServiceBus
для обработки некоторых сообщений.Это работало нормально, но в последнее время мне нужно было изменить свойство сообщения с массива строк на одну строку, и это привело к тому, что большинство сообщений оказались в очереди недоставленных сообщений.Кажется странным, что некоторые сообщения успешно обрабатываются, а большинство - неудачно.
Единственное изменение объекта .net заключается в следующем:
public string[] Ids { get; set; }
становится
public string Id {get; set;}
У меня есть некоторые журналы на месте, и он показывает несколько записей:
Произошло сообщение об ошибке обработки: Ошибка преобразования значения «myId» в тип «System.String []».Путь 'Id', строка 1, позиция 776. в Newtonsoft.Json.Serialization.JsonSerializerInternalReader.EnsureType (считыватель JsonReader, значение объекта, культура CultureInfo, контракт JsonContract, тип targetType)
Это указывает на то, чточто проблема связана с тем, что объект десериализован неправильно, но я понятия не имею, почему он пытается преобразовать строку 'myId' в массив строк.
Я десериализую следующим образом:
var model = JsonConvert.DeserializeObject<AssignBenefitsRequest>(Encoding.UTF8.GetString(message.Body));
Когда я проверяю результат Encoding.UTF8.GetString(message.Body)
, строка выглядит правильно сформированной и идентичной тому, как она выглядит при сериализации перед добавлением в очередь следующим образом:
var message = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(new MyObject
{
Id = model.Id
}));
результат в обоих случаяхвыглядит так:
"{\"Id\":\"myId\"}"
У меня закончились идеи о том, почему это происходит - кто-нибудь может пролить свет на это?