【问题标题】:How to serialize FileStream object to JSON string?如何将 FileStream 对象序列化为 JSON 字符串?
【发布时间】:2021-06-04 07:06:44
【问题描述】:

我有一个模型用作 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.

我该如何解决这个问题?

【问题讨论】:

  • 为什么要序列化为JSON?有多大?

标签: c# json asp.net-core type-conversion filestream


【解决方案1】:

简短的回答,你不能序列化Streams

为此,您可以考虑将流数据转换为二进制对象:BLOBhttps://en.wikipedia.org/wiki/Binary_large_object

您可以将 blob 保存为 json 中的字符串。

见: How to convert an Stream into a byte[] in C#?

注意:我不建议对任何文件操作使用这种方式。您可以使用流。

【讨论】:

    【解决方案2】:

    SerializeObject-Method 尝试序列化 FileStreamResult 类型的对象。 我猜这几乎是不可能的,因为这可能包含许多(本机)依赖项。

    我建议先将您的 FileStream 转换为字节数组(使用“.ToArray()”方法),或者直接将其转换为 BASE64-String 更好,这样您就可以确定到底是什么序列化了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-31
      • 2019-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-04
      相关资源
      最近更新 更多