如何将 FileStream 对象序列化为 JSON 字符串?

问题描述

我有一个模型用作 post 方法的参数。

我的模型是:

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 字符串,这样您就可以确定序列化的内容。