Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Consider the following innocent looking code:
[System.Runtime.Serialization.DataContract]
public enum TestEnum : short
{
[System.Runtime.Serialization.EnumMember] Undefined = 0,
[System.Runtime.Serialization.EnumMember] TestType1 = 1,
[System.Runtime.Serialization.EnumMember] TestType2 = 2,
}
[System.Runtime.Serialization.DataContract]
public class TestData
{
private TestEnum _test = TestEnum.Undefined;
[System.Runtime.Serialization.DataMember]
public TestEnum Test
{
get { return _test; }
set { _test = value; }
}
}
Do you see any problems with it? Notice that TestEnum values are defined as short, not the default (integer) data type…
While the System.Runtime.Serialization.DataContractSerializer will serialize/de-serialize an instance of TestData class without any problems, System.Web.Script.Serialization.JavaScriptSerializer will throw an exception -- "Specified cast is not valid."
Try it yourself:
TestData d1 = new TestData();
d1.Test = TestEnum.TestType1;
System.Web.Script.Serialization.JavaScriptSerializer js = new System.Web.Script.Serialization.JavaScriptSerializer();
string x = js.Serialize(d1);
Note: change the TestEnum to be int, and the problem is gone…