序列化视图模型时出错:“类型'System.Web.HttpPostedFileWrapper'无法序列化。”

时间:2013-01-11 03:46:02

标签: c# asp.net asp.net-mvc

这是我的观点模型:

[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属性标记为不可序列化?

2 个答案:

答案 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。即使是自动实现的属性也有编译器生成的支持字段。序列化程序使用支持字段,而不是属性。