这是我的观点模型:
[Serializable]
public class MyViewModel
{
public int VendorId { get; set; }
public HttpPostedFileBase SpreadsheetFile { get; set; }
public IEnumerable<Vendor> Vendors { get; set; }
}
我正在使用数据加载我的视图模型并将其传递给视图并将其序列化:
@Html.Serialize("MyModel", myViewModel)
但是我收到了这个错误
类型'System.Web.HttpPostedFileWrapper'无法序列化。请考虑使用DataContractAttribute属性对其进行标记,并使用DataMemberAttribute属性标记要序列化的所有成员。如果类型是集合,请考虑使用CollectionDataContractAttribute对其进行标记。有关其他受支持的类型,请参阅Microsoft .NET Framework文档。
我不确定如何使用DataContractAttribute标记某些内容。有没有办法将HttpPostedFileBase属性标记为不可序列化?
答案 0 :(得分:1)
尝试将其标记为NonSerialized。
[Serializable]
public class MyViewModel
{
public int VendorId { get; set; }
[NonSerialized]
public HttpPostedFileBase SpreadsheetFile { get; set; }
public IEnumerable<Vendor> Vendors { get; set; }
}
答案 1 :(得分:0)
将SpreadsheetFile更改为具有支持字段的属性,并标记支持字段NonSerialized
[NonSerialized]
private HttpPostedFileBase _spreadSheetFile;
public HttpPostedFileBase SpreadsheetFile {
get { return _spreadSheetFile; }
set { _spreadSheetFile = value; }
}
序列化程序将尊重支持字段上的atrribute。即使是自动实现的属性也有编译器生成的支持字段。序列化程序使用支持字段,而不是属性。