2015-11-13 3 views
0

У меня есть полная загрузка веб-служб WCF, которые получают объекты POST JSON и отвечают на другие форматированные данные JSON.WCF Service parse JSON as Dictionary <string, string>()

В одном конкретном методе внутри службы я пытаюсь передать объект JSON и проанализировать его как Словарь().

Интерфейс метода определяется следующим образом:

[OperationContract(Name = "GetSomeData")] 
[WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)] 
string GetSomeData(AuthenticationData authData, Dictionary<string, string> options, string srcHash); 

и сам метод декларации:

public string GetSomeData(AuthenticationData authData, Dictionary<string,string> options, string srcHash) 
{ 
    // do something fancy 
} 

authData и srcHash стандартные параметры на всех методов и содержат ожидаемый данные, правильно проанализированы как объект AuthenticationData для authData.

Другие методы отлично работают как для объявленных объектов, так и для примитивов, однако словарь всегда пуст.

Строка JSON отправляется через это:

"{\"options\",{\"id\":\"1\"}}" 

Почему это не анализируется как словарь?

ответ

0

В конце концов я отказался от этого и создал класс List для имитации словаря.

[Serializable] 
public class JSONDictionary 
{ 
    [DataMember] public string _key; 
    [DataMember] public string _value; 
} 

Тогда на стороне клиента (Javascript):

client.utils.toJSONDictionary = function (obj) 
{ 
    var dictionary = []; 
    for (member in obj) 
    { 
     dictionary.push({ _key: member, _value: obj[member].toString() }); 
    } 
    return dictionary; 
} 

И это прекрасно работает. Было бы неплохо использовать правильный словарь в C#, но ... ну у вас не может быть всего.

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