Ho un problema con ASP.Net MVC3 (RC2). Sto scoprendo che la nuova funzionalità di bind del modello JSON, che è implicita in MVC3, non vuole deserializzare in una proprietà che ha un tipo enum.ASP.Net MVC3 - perché il supporto predefinito per l'associazione modello JSON non riesce a decodificare i tipi enum?
Ecco una lezione di prova e enum tipo:
public enum MyEnum { Nothing = 0, SomeValue = 5 }
public class MyClass
{
public MyEnum Value { get; set; }
public string OtherValue { get; set; }
}
Si consideri il seguente codice, che passa con successo il test di unità:
[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);
}
Se ho serializzare obj1
sopra, ma poi inviare i dati per un controller MVC3 (esempio sotto) con un singolo parametro di tipo MyClass, qualsiasi altra proprietà dell'oggetto deserializza correttamente, ma qualsiasi proprietà che è un tipo enum deserializza al valore predefinito (zero).
[HttpPost]
public ActionResult TestAction(MyClass data)
{
return Content(data.Value.ToString()); // displays "Nothing"
}
Ho scaricato il codice sorgente MVC da CodePlex ma stumped quanto a dove si verifica il codice vero e eseguire la deserializzazione, il che significa che non riesco a capire cosa la gente di Microsoft hanno utilizzato per eseguire la deserializzazione e quindi determinare se sto facendo qualcosa di sbagliato o se c'è una soluzione alternativa.
Qualsiasi suggerimento sarebbe apprezzato.
Ho aggiunto una risposta su questo thread che potrebbe aiutare. http://stackoverflow.com/questions/6051756/model-binding-to-enums-in-asp-net-mvc-3/9070963#9070963 – Difinity