Как динамически создать объект JSON в C # (из файла ресурсов ASP.NET)? - PullRequest
8 голосов
/ 07 июля 2011

Мне нужно сериализовать строки из файла ресурсов (.resx) в объект JSON. Ключи файла ресурсов постоянно меняются, и поэтому я не могу просто создать объект C #, который принимает соответствующие значения. Это должно быть динамическое решение. Я могу пройтись по парам ключ-значение для файла, но мне нужен простой способ сериализации их в JSON.

Я знаю, что мог бы сделать:

Object thing = new {stringOne = StringResource.stringOne; ...}

Но я бы предпочел что-то вроде:

Object generic = {}
foreach (DictionaryEntry entry in StringResource) {
    generic.(entry.Key) = entry.Value
}

Или я должен просто создать собственный сериализатор JSON, который создает фрагментарный объект (то есть цикл foreach, который добавляет часть строки JSON с каждым циклом)?

EDIT
В итоге я написал быстрый сериализатор JSON, который создает строку по одному полю за раз. Я не хотел включать целую библиотеку JSON, так как это единственное использование объектов JSON (по крайней мере, на данный момент). В конечном счете, то, что я хотел, вероятно, непрактично и не существует, поскольку его функции лучше обслуживаются другими структурами данных. Спасибо за все ответы, хотя!

Ответы [ 5 ]

7 голосов
/ 07 июля 2011

Если вы используете C # 4.0, вы должны взглянуть на магический System.Dynamic.ExpandoObject . Это объект, который позволяет динамически добавлять и удалять свойства во время выполнения, используя новый DLR в .NET 4.0. Здесь - хороший пример использования ExpandoObject.

Получив полностью заполненный ExpandoObject, вы, вероятно, сможете легко его сериализовать с любой из библиотек JSON, упомянутых в других превосходных ответах.

1 голос
/ 07 июля 2011

Это звучит как несчастный случай, ожидающий, чтобы произойти (т. Е. Создать выходные данные до цементирования структуры), но это происходит.

Настраиваемый сериализатор JSON является привлекательным вариантом, поскольку он позволяет вам легко перейти от вашегословарь в формате JSON.Я хотел бы взглянуть на библиотеки с открытым исходным кодом (JSON.NET и т. Д.), Чтобы узнать, сможете ли вы сократить время разработки.

Я также считаю, что настройка в несколько более структурированном формате, таком как XML, является достойным выбором.Сериализовать из XML в JSON довольно просто, используя существующие библиотеки, поэтому вы избегаете тяжелой настройки /

Большой вопрос в том, для каких целей в конечном итоге будут служить данные.Если вы решите эту проблему с помощью любого из этих методов, создаете ли вы большие проблемы в будущем.

0 голосов
/ 07 июля 2011

Как я это делаю:

var serialiser = new System.Web.Script.Serialization.JavaScriptSerializer ();строка json = serialiser.Serialize (data);context.Response.Write (JSON);

0 голосов
/ 07 июля 2011

Newtonsoft - это библиотека, которая имеет все виды изящных инструментов JSON ... среди них, однострочный сериализатор на лету и десериализаторы ... проверьте, это моя любимая библиотека JSON там

http://james.newtonking.com/pages/json-net.aspx

Если я правильно помню, у него есть класс, который преобразует JSON в объект .NET без необходимости сначала создавать объект .NET.Думаю, это в классе Json.Convert

0 голосов
/ 07 июля 2011

Возможно, я бы использовал JSON.NET и возможность создать JSON из XML .

Затем вы можете создать XML в памяти и позволить JSON.NET конвертировать его в JSON для вас.Возможно, если вы углубитесь в API, есть и другие варианты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...