序列化视图模型出错:"Type 'System.Web.HttpPostedFileWrapper&#

本文关键字:System Web HttpPostedFileWrapper Type quot 视图 模型 出错 序列化 | 更新日期: 2023-09-27 17:51:22

这是我的视图模型:

[Serializable]
public class MyViewModel
{
    public int VendorId { get; set; }
    public HttpPostedFileBase SpreadsheetFile { get; set; }       
    public IEnumerable<Vendor> Vendors { get; set; }        
}

我正在用数据加载我的视图模型并将其传递给视图并序列化它:

@Html.Serialize("MyModel", myViewModel)

但是我得到了这个错误

类型的包含。HttpPostedFileWrapper'不能被序列化。考虑用DataContractAttribute属性标记它,并用DataMemberAttribute属性标记您想要序列化的所有成员。如果类型是一个集合,请考虑使用CollectionDataContractAttribute标记它。有关其他支持的类型,请参阅Microsoft . net Framework文档。

我不知道如何用DataContractAttribute标记一些东西。是否有一种方法来标记HttpPostedFileBase属性为不可序列化?

序列化视图模型出错:"Type 'System.Web.HttpPostedFileWrapper&#

尝试标记为NonSerialized

[Serializable]
public class MyViewModel
{
    public int VendorId { get; set; }
    [NonSerialized]
    public HttpPostedFileBase SpreadsheetFile { get; set; }       
    public IEnumerable<Vendor> Vendors { get; set; }        
}

将SpreadsheetFile更改为带有支持字段的属性,并将支持字段标记为NonSerialized

[NonSerialized]
private HttpPostedFileBase _spreadSheetFile;
public HttpPostedFileBase SpreadsheetFile {
    get { return _spreadSheetFile; } 
    set { _spreadSheetFile = value; }
}

序列化器将尊重后备字段上的属性。即使是自动实现的属性也有一个由编译器生成的支持字段。序列化器使用后备字段,而不是属性。