У меня проблема с 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 использовали десериализацию и, таким образом, определяли, делаю ли я что-то не так или есть обходной путь.
Любые предложения будут оценены.