Tengo un problema con ASP.Net MVC3 (RC2). Estoy descubriendo que la nueva funcionalidad de enlace de modelo JSON, que está implícita en MVC3, no desea deserializar a una propiedad que tenga un tipo de enumeración.ASP.Net MVC3: ¿por qué la compatibilidad predeterminada para el enlace del modelo JSON no se decodifica en los tipos enum?
Aquí es una clase de muestra y la enumeración de tipo:
public enum MyEnum { Nothing = 0, SomeValue = 5 }
public class MyClass
{
public MyEnum Value { get; set; }
public string OtherValue { get; set; }
}
Consideremos el siguiente código, que supera con éxito la prueba de unidad:
[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);
}
Si serializar obj1
arriba, pero luego puesto que los datos de un controlador MVC3 (ejemplo a continuación) con un único parámetro de tipo MyClass, cualquier otra propiedad del objeto se deserializará correctamente, pero cualquier propiedad que sea un tipo enum se deserializará al valor predeterminado (cero).
[HttpPost]
public ActionResult TestAction(MyClass data)
{
return Content(data.Value.ToString()); // displays "Nothing"
}
he descargado el código fuente de CodePlex MVC pero estoy perplejo en cuanto a donde se produce el código real de realizar la deserialización, lo que significa que no puedo trabajar en lo que la gente de Microsoft se han utilizado para llevar a cabo la deserialización y así determinar si estoy haciendo algo mal o si hay una solución alternativa.
Cualquier sugerencia sería apreciada.
He agregado una respuesta en este hilo que podría ayudar. http://stackoverflow.com/questions/6051756/model-binding-to-enums-in-asp-net-mvc-3/9070963#9070963 – Difinity