Просто скачайте пакет Newtonsoft.Json Nuget.
Это предпочтительный способ работы с json в c #.
Ваш код с использованием Newtonsoft будет:
dynamic reply = new System.Dynamic.ExpandoObject();
reply.name = "John";
reply.wins = 42;
string json = Newtonsoft.Json.JsonConvert.SerializeObject(reply);
System.Console.WriteLine(json);
EDIT:
Я просто хочу лучше объяснить, почему вы получаете такой результат, когда используете метод System.Web.Helpers.Json.Encode
.
ExpandoObject - это объект, поля которого определены в время выполнения , отличное от обычного объекта, поля / свойства / методы которого определены во время компиляции. Чтобы иметь возможность определять их во время выполнения, объект expando внутренне содержит словарь, который представляет собой набор пар ключ-значение.
Я не знаю, как работает этот помощник, но, вероятно, это просто простой сериализатор, и поэтому он сериализуется в массив пар ключ-значение вместо фактического ожидаемого объекта. Библиотека Newtonsoft.Json является почти стандартом для проектов на c # и, очевидно, знает, как работает объект Expando.