当前位置: 首页 > 知识库问答 >
问题:

您能序列化转换为C#对象的JSON中的ByteArrayContent吗?

宇文念
2023-03-14

我在VS Studio中编写了一个C#Web API,并创建了许多DTO,这些DTO被序列化为任何客户端都可以使用的JSON实体。我的一个API调用是返回一个PDF文件,所以经过一些在线研究,我设置了其中一个DTO是以以下格式设置的。我在某处读到你可以做到这一点,但不是百分之百确定:

public class MyCustomResult
{
   public bool Success;
   public DateTime? LastRunDate;
   public string ErrorCode;
   public string Message;
   public ByteArrayContent ReportBody;
}

当将对象作为IHttpActionResult返回时,我不会得到任何错误:

返回确定(结果);

我可以在服务器上看到报告byte[]的字节大小约为700K。但是,当我在客户机上检索对象时,JSON实体大约是400B,BytecontentStream中没有字节内容。当我在Postman中运行查询时,我得到一个空的头,因此看起来ByteContentStream不能被Newtonsoft JSON序列化。

有什么我应该考虑的选择吗?

共有1个答案

濮阳奇逸
2023-03-14

下面是使用ByteArrayContent的场景:

using(var req = new HttpRequestMessage(HttpMethod.Post, new Uri("https://example.com"))
{
    req.Content = new ByteArrayContent(...);
    using(var resp = await _client.SendAsync(req))
    {
        var data = await resp.Content.ReadAsAsync<object>();
    }
}

你想做的是:

public class MyCustomResult
{
   public bool Success;
   public DateTime? LastRunDate;
   public string ErrorCode;
   public string Message;
   public byte[] ReportBody; // <-- change this to byte[]
}

var dataToSend = new MyCustomResult(); // fill this in

using(var req = new HttpRequestMessage(HttpMethod.Post, new Uri("https://example.com"))
{
    req.Content = new StringContent(
        JsonConvert.SerializeObject(dataToSend, Encoding.UTF8, "application/json"));
    using(var resp = await _client.SendAsync(req))
    {
        var data = await resp.Content.ReadAsAsync<object>();
    }
}

(注:此代码未经测试)

因此,将发生的情况是serializeobject将该字节数组转换为Base64字符串,然后将其发送。

然后,使用者必须对Base64字符串进行解码。如果它是另一个NewtonSoft.json客户机,并且模型定义匹配,那么它会自动为您解码。

我知道你正在做一个API端点。上面的示例是为了展示ByteArrayContent的用法以及它为什么存在于.NET中。返回数据的方式是正确的:返回Ok(响应);只要修复了模型。

所以总结一下:

ByteArrayContentHttpContent的一个实现,它应该只用作响应体。它不能与JSON响应结合使用。

 类似资料:
  • 问题内容: Json字符串: C#类: C#将json转换为电影的c#列表: 我的变量最终是一个计数为0的空列表。我是否缺少某些内容? 问题答案: 您的C#类映射与json结构不匹配。 解决方案:

  • 问题内容: 这个下课 需要转换为 我尝试将对象手动传递给将变量设置为字典并返回字典的函数。但是,我希望有一种更好的方法来实现这一目标。 问题答案: 在Swift 4中,您可以从类型继承。

  • 问题内容: 我从看起来像这样的API获取JSON: 我尝试了几种方法来在c#对象中表示此JSON(太多内容无法在此处列出)。我已经尝试过使用列表和字典,这是我尝试表示它的最新示例: 这是我用来反序列化JSON的方法: 包含和。并且包含,但是是。因此,除了反序列化之外,什么都没有。 它应该很简单,但是由于某种原因我无法弄清楚正确的对象表示形式 问题答案: 要使用,即: 假设项目名称和随响应而变化,并

  • 问题内容: 我需要将Objective- C对象序列化和反序列化为JSON以存储在CouchDB中。人们是否有通用解决方案最佳实践的示例代码?我看了几个JSON框架,它们在NSDictionary / NSArray级别停止了。即,许多框架会将NSDictionary / NSArray序列化和反序列化为JSON。但是我仍然要做将NSDictionary转换为Objective-C对象的工作。 为

  • 问题内容: 我有如下的Json字符串 我想将Json字符串转换为以下类 我的反序列化代码是 但是我在序列化后得到空值,我该如何解决呢? 问题答案: 正如其他人已经指出的那样,未获得预期结果的原因是因为JSON与尝试反序列化的类结构不匹配。您需要更改JSON或更改类。由于其他人已经展示了如何更改JSON,因此在这里我将采用相反的方法。 为了与您在问题中发布的JSON相匹配,您的类应按照以下定义。注意

  • 问题内容: 如何在JavaScript中将对象序列化为JSON? 问题答案: 您正在寻找。