Можно ли сериализовать Enum полностью? - PullRequest
1 голос
/ 28 июня 2010

У меня есть приложение .NET, работающее на WCF.В этом приложении у меня есть различные «Types», определенные («CourseType», «PresentationType», «HierarchyType» и т. Д.) Как перечисления.Они автоматически синхронизируются с базой данных, поэтому я могу написать хороший код, например:

public enum CourseType {
  Online = 1, 
  Classroom = 2
}

...

if(course.Type == CourseType.Online) {
  // do stuff on the server
}

Мне было интересно, если бы кто-нибудь знал о хорошем способе сериализации whole enum, так что я могу написать аналогичные операторы в JavaScript.

Обратите внимание, что я не спрашиваю о сериализации только значения.Я хочу получить какой-то объект JavaScript, который выглядит следующим образом:

CourseType = {
  'online' : 1,
  'classroom': 2
};

Я мог бы сделать это с помощью отражения, я знаю, но я надеялся, что было какое-то встроенное решение...

Ответы [ 2 ]

1 голос
/ 28 июня 2010

Использование JSON-сериализатора с анонимным типом работает очень хорошо, на мой взгляд, если перечисление относительно статично и часто не меняется:

new { CourseType.Online, CourseType.Classroom }

Но если вы искали что-то для обработки динамических или множественных перечислений без обслуживания, вы можете создать что-то, что перебирает пары имя-значение и создает словарь для сериализации (не требует отражения).

public static IDictionary<string, int> ConvertToMap(Type enumType)
{
  if (enumType == null) throw new ArgumentNullException("enumType");
  if (!enumType.IsEnum) throw new ArgumentException("Enum type expected", "enumType");

  var result = new Dictionary<string, int>();
  foreach (int value in Enum.GetValues(enumType))
    result.Add(Enum.GetName(enumType, value), value);

  return result;
}

Редактировать

Если вам нужен сериализатор JSON ... Мне действительно нравится использовать JSON.NET http://james.newtonking.com/projects/json-net.aspx

0 голосов
/ 28 июня 2010

Вот, пожалуйста,

private enum CourseType
{
    Online = 1,
    Classroom = 2
}

private void GetCourseType()
{
    StringBuilder output = new StringBuilder();

    string[] names =
        Enum.GetNames(typeof(CourseType));

    output.AppendLine("CourseType = {");
    bool firstOne = true;
    foreach (string name in names)
    {
        if (!firstOne)
            output.Append(", " + Environment.NewLine);
        output.Append(string.Format("'{0}' : {1:N0}", name, (int)Enum.Parse(typeof(CourseType), name)));

        firstOne = false;
    }
    output.AppendLine(Environment.NewLine + "}");

    // Output that you could write out to the page...
    Debug.WriteLine(output.ToString());
}

Это выводит:

CourseType = {
'Online' : 1, 
'Classroom' : 2
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...