Как сериализовать объект HttpPostedFileBase в json
У меня есть метод в контроллере с именем "Upload" с параметром 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"
});
}
}
}
1 ответ
Решение
Вы можете создать собственный 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());