我有一个复杂的对象,我已经创建了一个ViewModel,一个View和一些自定义HTML助手。我的复杂对象中的一个对象是“Sender”对象。该对象需要ID和SenderType枚举是唯一的。我创建了一个自定义的Html Dropdown助手,它为每个选项添加了一个数据属性。
<select id="Sender">
<optgroup label="Dynamic">
<option selected="selected" value="1" data-sendertype="Dynamic">Academic Advisor</option>
</optgroup>
<optgroup label="Generic">
<option value="1" data-sendertype="Generic">Test Account</option>
</optgroup>
</select>
我应该反序列化的对象是(只填充了ID和SenderType字段):
public class Sender
{
public int SenderID { get; set; }
public string EmailAddress { get; set; }
public SenderType Type { get; set; }
public string DisplayName { get; set; }
}
public enum SenderType{
Generic = 1,
Dynamic = 2
}
并且表单由以下jQuery发布:
$(".controlButtons button[name='Save']").click(function(event) {
tinyMCE.triggerSave(true, true);
var data = $("#editTemplateForm").serializeArray();
data.push(
{
name: "Template.Sender.SenderID",
value: $("#Sender").val()
},
{
name: "Template.Sender.SenderType",
value: $("#Sender option:selected").attr("data-senderType") == "Dynamic" ? 2 :1
},
{
name: "Template.DefaultSender.SenderID",
value: $("#Sender").val()
},
{
name: "Template.DefaultSender.SenderType",
value: $("#DefaultSender option:selected").attr("data-senderType") == "Dynamic" ? 2 :1
}
);
console.log(data);
$.ajax({
type: "POST",
url: "@Url.Action("EditTemplateTab", new {id = Model.Template.TemplateID})",
data: data,
success: function(data) {
$("#ui-tabs-1").html(data);
},
error: function(data) {
alert(data);
}
});
});
我遇到的问题是它没有反序列化我正在正确添加到serializedArray中的SenderType,并且说SenderType 0无效(这是真的)。
错误的屏幕截图
答案 0 :(得分:2)
JSON序列化程序无法很好地转换.NET枚举。看到这篇文章:
http://msdn.microsoft.com/en-us/library/bb412170.aspx
尝试这种解决方法:
public class Sender
{
public int SenderID { get; set; }
public string EmailAddress { get; set; }
public SenderType Type { get; set; }
public int SenderTypeValue
{
get { return (int) this.Type; }
set { this.Type = (SenderType) value; }
}
public string DisplayName { get; set; }
}
public enum SenderType
{
Generic = 1,
Dynamic = 2
}