问题描述
我的模型是:
public class Sendobject
{
public string Id { get; set; }
public string Body { get; set; }
public string Subject { get; set; }
public SendobjectParameters Parameters { get; set; }
public object[] Attachments { get; set; }
}
public class SendobjectParameters
{
public string Id { get; set; }
public string Name { get; set; }
public string Surname { get; set; }
public string Address { get; set; }
}
我有一个附件要与 Attachments = new[] { attachment }
一起发送。我的附件是一个 excel 文件,附件类型是 FileStreamResult
。
在post方法中,我尝试像 string content = JsonConvert.SerializeObject(sendContent);
一样序列化这个对象。我在那里得到了一个关于序列化的错误:Newtonsoft.Json.JsonSerializationException: Error getting value from 'ReadTimeout' on 'System.IO.MemoryStream'. ---> system.invalidOperationException: Timeouts are not supported on this stream.
我该如何解决这个问题?
解决方法
简短的回答,您不能将 Streams
序列化。
为此,您可以考虑将流数据转换为二进制对象:BLOB
https://en.wikipedia.org/wiki/Binary_large_object .
您可以将 blob 保存为 json 中的字符串。
见: How to convert an Stream into a byte[] in C#?
注意:我不建议对任何文件操作采用这种方式。您可以使用流。
,SerializeObject-Method 尝试序列化您的 FileStreamResult 类型的对象。 我猜这很难甚至不可能,因为这可能包含许多(本机)依赖项。
我建议首先将您的 FileStream 转换为字节数组(使用“.ToArray()”-方法),或者甚至更好地将其直接转换为 BASE64 字符串,这样您就可以确定序列化的内容。