如何将HttpPostedFileBase对象序列化为json
我在一个名为“Upload”的控制器中有一个方法,它带有一个参数如何将HttpPostedFileBase对象序列化为json,json,asp.net-mvc-file-upload,Json,Asp.net Mvc File Upload,我在一个名为“Upload”的控制器中有一个方法,它带有一个参数HttpPostedFileBase对象, 我从视图中发布了文件,并成功地将其保存到文件夹中。但是,当我尝试返回包含以下内容的JSON字符串对象时,它会抛出一个异常消息: “从上的'ReadTimeout'获取值时出错。” 'System.Web.HttpInputStream' 在“files=files”的情况下,如果我删除它,它将正确返回。但我需要这些数据 public string Upload(HttpPostedFile
HttpPostedFileBase
对象,
我从视图中发布了文件,并成功地将其保存到文件夹中。但是,当我尝试返回包含以下内容的JSON字符串对象时,它会抛出一个异常消息:
“从上的'ReadTimeout'获取值时出错。”
'System.Web.HttpInputStream'
在“files=files”的情况下,如果我删除它,它将正确返回。但我需要这些数据
public string Upload(HttpPostedFileBase files)
{
try
{
if (files != null && files.ContentLength > 0)
{
var path = Path.Combine(Server.MapPath("~/Uploads"), files.FileName);
files.SaveAs(path);
return JsonConvert.SerializeObject(
new
{
files=files,
Passed = true,
Mesaj = "item added"
});
}
}
}
您可以创建自定义JsonConverter,如下所示:
public class HttpPostedFileConverter : JsonConverter
{
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
var stream = (Stream)value;
using (var sr = new BinaryReader(stream))
{
var buffer = sr.ReadBytes((int)stream.Length);
writer.WriteValue(Convert.ToBase64String(buffer));
}
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
throw new NotImplementedException();
}
public override bool CanRead
{
get { return false; }
}
public override bool CanConvert(Type objectType)
{
return objectType.IsSubclassOf(typeof(Stream));
}
}
并将其传递给JsonConvert.SerializeObject方法
return JsonConvert.SerializeObject(
new
{
files=files,
Passed = true,
Mesaj = "item added"
},
new HttpPostedFileConverter());