Я создаю небольшое количество «веб-служб» JSON, используя JsonResult как часть большого приложения MVC2, веб-службы будут использоваться приложением iPhone.Разработчик приложения предложил сокращать имена ключей, чтобы уменьшить количество данных, передаваемых по мобильной сети.В настоящее время у меня есть несколько классов, которые я возвращаю с MVC JsonResult, например, класс PrimaryCategories:
public class PrimaryCategory
{
public long Id { get; set; }
public string Name { get; set; }
public string Image { get; set; }
public List<long> SubCategories { get; set; }
public bool IsVisible { get; set; }
}
При заполнении и возвращении через JsonResult возвращается следующее:
[
{
"Id":1,
"Name":"Animals",
"Image":"/Content/Categories/1.png",
"SubCategories":[8,9,10],
"IsVisible":true
},
{
"Id":2,
"Name":"Birds",
"Image":"/Content/Categories/2.png",
"SubCategories":[11,12,13],
"IsVisible":true
}
]
Есть линекоторые встроены в тегирование свойств с помощью атрибутов или предоставление метаданных JavaScriptSerializer для обеспечения соответствия между сокращенными именами свойств и длинными именами свойств, так что возвращается следующее:
[
{
"id":1,
"n":"Animals",
"img":"/Content/Categories/1.png",
"sc":[8,9,10],
"vis":true
},
{
"id":2,
"n":"Birds",
"img":"/Content/Categories/2.png",
"sc":[11,12,13],
"vis":true
}
]
В настоящее время мой лучшийРешение состоит в том, чтобы пометить каждое из свойств с помощью ScriptIgnore , а затем предоставить второй набор свойств, которые используют свойства с длинными именами в качестве резервного хранилища:
public class PrimaryCategory
{
[ScriptIgnore]
public long Id { get; set; }
[ScriptIgnore]
public string Name { get; set; }
// etc.
public long id
{
get { return Id; }
set { Id = value; }
}
public string n
{
get { return Name; }
set { Name = value; }
}
// etc.
}
Это кажется слишком многословным.Моей первой мыслью было, что, возможно, был атрибут, похожий на [ScriptIgnore], который позволил бы мне указать имя для ключа JSON, однако я не могу найти его в MSDN или через Reflector.Вторым моим предпочтением было бы внедрить (я использую NInject для своих собственных классов) альтернативный сериализатор JavaScript для MVC2, чтобы использовать поддерживающий такой атрибут, однако:
- Я не знаю, с чего начать инъекциюальтернативный JavaScriptSerializer для MVC для использования
- Могу ли я каким-то образом расширить существующий класс JavaScriptSerializer, он, похоже, не открыт для расширения и не реализует интерфейс или не наследует что-либо (кроме Object).
Любая помощь, комментарии и советы приветствуются.