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.NETFrameworkのドキュメントを参照してください。

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 に答える