Ich habe ein Problem mit ASP.Net MVC3 (RC2). Ich stelle fest, dass die neue JSON-Model-Bindungsfunktion, die implizit in MVC3 enthalten ist, nicht in der Lage ist, in eine Eigenschaft zu deserialisieren, die einen Enum-Typ hat.
Hier ist eine Beispielklasse und ein Enum-Typ:
public enum MyEnum { Nothing = 0, SomeValue = 5 }
public class MyClass
{
public MyEnum Value { get; set; }
public string OtherValue { get; set; }
}
Betrachten Sie den folgenden Code, der den Unittest erfolgreich besteht:
[TestMethod]
public void Test()
{
var jss = new JavaScriptSerializer();
var obj1 = new MyClass { Value = MyEnum.SomeValue };
var json = jss.Serialize(obj1);
var obj2 = jss.Deserialize(json);
Assert.AreEqual(obj1.Value, obj2.Value);
}
Wenn ich obj1
oben serialisiere, aber dann diese Daten an einen MVC3-Controller (Beispiel unten) mit einem einzelnen Parameter vom Typ MyClass sende, werden alle anderen Eigenschaften des Objekts ordnungsgemäß deserialisiert, aber jede Eigenschaft, die ein Enum-Typ ist, wird auf den Standardwert (null) deserialisiert.
[HttpPost]
public ActionResult TestAction(MyClass data)
{
return Content(data.Value.ToString()); // zeigt "Nothing" an
}
Ich habe den MVC-Quellcode von Codeplex heruntergeladen, aber ich stehe vor einem Rätsel, wo der tatsächliche Code für die Deserialisierung auftritt, was bedeutet, dass ich nicht herausfinden kann, was die Leute bei Microsoft verwendet haben, um die Deserialisierung durchzuführen, und somit feststellen kann, ob ich etwas falsch mache oder ob es einen Workaround gibt.
Über Vorschläge würde ich mich freuen.