ASP.Net MVC3 - почему поддержка по умолчанию для привязки модели JSON не может декодировать в типы перечислений?

У меня проблема с ASP.Net MVC3 (RC2). Я обнаружил, что новая функция привязки модели JSON, которая неявно реализована в MVC3, не хочет десериализоваться в свойство, имеющее тип перечисления.

Вот пример класса и типа перечисления:

public enum MyEnum { Nothing = 0, SomeValue = 5 }
public class MyClass
{
    public MyEnum Value { get; set; }
    public string OtherValue { get; set; }
}

Рассмотрим следующий код , который успешно проходит модульный тест:

[TestMethod]
public void Test()
{
    var jss = new JavaScriptSerializer();
    var obj1 = new MyClass { Value = MyEnum.SomeValue };
    var json = jss.Serialize(obj1);
    var obj2 = jss.Deserialize<MyClass>(json);
    Assert.AreEqual(obj1.Value, obj2.Value);
}

Если я сериализую obj1 выше, но затем отправляю эти данные в контроллер MVC3 (пример ниже) с одним параметром типа MyClass, любые другие свойства объекта десериализуются правильно, но любое свойство, которое является тип перечисления десериализуется до значения по умолчанию (ноль).

[HttpPost]
public ActionResult TestAction(MyClass data)
{
    return Content(data.Value.ToString()); // displays "Nothing"
}

Я загрузил исходный код MVC из codeplex, но не понимаю, где происходит фактический код, выполняющий десериализацию, что означает, что я не могу понять, что люди в Microsoft использовали десериализацию и, таким образом, определяли, делаю ли я что-то не так или есть обходной путь.

Любые предложения будут оценены.

5
задан Nathan Ridley 3 January 2011 в 05:36
поделиться