3

这是我的视图模型:

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

4

2 回答 2

1

尝试将其标记为NonSerialized

[Serializable]
public class MyViewModel
{
    public int VendorId { get; set; }

    [NonSerialized]
    public HttpPostedFileBase SpreadsheetFile { get; set; }       

    public IEnumerable<Vendor> Vendors { get; set; }        
}
于 2013-01-11T03:48:11.173 回答
0

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

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

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

于 2013-01-11T06:38:10.130 回答