Я пытаюсь вернуть словарь из службы REST WCF как объект JSON. Я хочу, чтобы формат был {"ключ": "значение"} , поэтому я создал свой собственный класс, как описано here и here.JSON ответ от WCF escapes значения имени
Метод обслуживания работает, вроде. Проблема в том, что имена ключей экранированы. Например, если мой словарь содержит «Hello world»: 100, я получаю {«Hello_x0020_world»: 100}. Он также избегает других символов, таких как% и т. Д.
Есть ли какой-то способ, которым я могу сказать, что сериализация не позволяет избежать имен таким образом? Это почти похоже на использование правил xml, которые (необязательно) не применяются к JSON.
Мой сериализации класс:
[Serializable]
public class JsonDictionary : ISerializable
{
private Dictionary<string, object> _Dictionary;
public JsonDictionary()
{
_Dictionary = new Dictionary<string, object>();
}
public JsonDictionary(SerializationInfo info, StreamingContext context)
{
_Dictionary = new Dictionary<string, object>();
SerializationInfoEnumerator enumerator = info.GetEnumerator();
while (enumerator.MoveNext())
{
_Dictionary.Add(enumerator.Name, enumerator.Value);
}
}
public object this[string key]
{
get { return _Dictionary[key]; }
set { _Dictionary[key] = value; }
}
public void Add(string key, object value)
{
_Dictionary.Add(key, value);
}
public bool ContainsKey(string key)
{
return _Dictionary.ContainsKey(key);
}
public void GetObjectData(SerializationInfo info, StreamingContext context)
{
foreach (string key in _Dictionary.Keys)
info.AddValue(key, _Dictionary[key], _Dictionary[key] == null ? typeof(object) : _Dictionary[key].GetType());
}
}
Мое определение функции службы:
[WebGet(UriTemplate = "", ResponseFormat = WebMessageFormat.Json)]
public JsonDictionary GetCollection()
{
JsonDictionary dict = new JsonDictionary();
dict.Add("Hello world", 100);
return dict;
}
Мне всегда нравилось, как JSON работает в браузере. Если вы не справитесь с накладными расходами, вам понадобится компрессор JSON в потоке и декомпрессор на клиенте. Есть много там – danny117