2013-09-24 4 views
1

У меня есть служба (услуга 1), которая получила список пары значений ключа. , Затем я конвертирую это в Json и отправляю в другую службу (услугу 2), которая сериализует данные и обрабатывает их как объект. Service1 не имеет представления о том, какие значения будут там для ключа. например, обслуживание 1 получает на вход СловарьОтправка данных Json на сервер + проблема десериализации

Name:Sample Test:TestCase1 InnerObject:{"InnerObjectType":"1", "Name":"Sample"} TestVector 

Я использую библиотеку NewtonSoft.Json построить JSON, чтобы отправить к обслуживанию 2.

JObject jsonData = new JObject(); 
Dictionary<string,string> dict = this.GetCasiPDPTestData(); 
foreach (string key in dict.Keys) 
{ 
    string value = dict[key];     
    jsonData.Add(new JProperty(key, value)); 
} 
string postData = jsonData.ToString(); 

Однако при этом, если значение имеет тип массив или объект, он переводится как строка и сервер кидает ошибку «Не удалось десериализации данных объекта из HTTP запроса»

сообщение данных выглядит как (Скрипач):

{ 
    "Type": "1", 
    "BoolParam": "True", 
    "TestVector": "[\"123\",\"456\"]", 
    "Text": "Surya Test 9/23/2013 3:41", 
    "Number": "44", 
    "InnerData": "{\"InnerMessage\": \"InnerMessage_44\",\"Things\": [{\"AdditionalType\": \"InnerAdditionalType1_44\",\"Name\": \"InnerName1_44\",\"Version\": 44,\"Url\": \"InnerUrl1_44\",\"Image\": \"InnerImage1_44\",\"Description\": \"InnerDescription1_44\"},{\"AdditionalType\": \"InnerAdditionalType2_44\",\"Name\": \"InnerName2_44\",\"Version\": 44,\"Url\": \"InnerUrl2_44\",\"Image\": \"InnerImage2_44\",\"Description\": \"InnerDescription2_44\"}]}", 
    "AdditionalType": "AdditionalType_44", 
    "Name": "Surya Test 9/20/2013 4:42", 
    "LastUpdatedAt": 635153176425968666, 
    "Version": "45", 
    "Url": "Url_44", 
    "Image": "Image_44", 
    "Description": "Description" 
} 

Мы можем видеть массив «TestVector», а объект «InnerData» интерпретируется как строка. Поскольку service1 не имеет понятия о значении ключа, какое решение будет анализировать словарь для создания json для отправки на service2. Данные ожидаемые службами 2

{ 
    "Type": "1", 
    "BoolParam": "True", 
    "TestVector": ["123","456"], 
    "Text": "Surya Test 9/23/2013 3:41", 
    "Number": "44", 
    "InnerData": {"InnerMessage": "InnerMessage_44","Things": [{"AdditionalType": "InnerAdditionalType1_44","Name": "InnerName1_44","Version": 44,"Url": "InnerUrl1_44","Image": "InnerImage1_44","Description": "InnerDescription1_44"},{"AdditionalType": "InnerAdditionalType2_44","Name": "InnerName2_44","Version": 44,"Url": "InnerUrl2_44","Image": "InnerImage2_44","Description": "InnerDescription2_44"}]}, 
    "AdditionalType": "AdditionalType_44", 
    "Name": "Surya Test 9/20/2013 4:42", 
    "LastUpdatedAt": 635153176425968666, 
    "Version": "45", 
    "Url": "Url_44", 
    "Image": "Image_44", 
    "Description": "Description" 
} 

Благодаря

ответ

0

Попробуйте с конвертером общественного классом KeyValuePairConverter: Newtonsoft.Json.JsonConverter Член Newtonsoft.Json.Converters

Смежные вопросы