gpt4 book ai didi

c# - 如何在没有字符集的情况下使用 DataContractJsonSerializer 在 C# 中发送 JSON?

转载 作者:太空狗 更新时间:2023-10-30 00:03:10 39 4
gpt4 key购买 nike

我使用 DataContractJsonSerializerStringContent 将 JSON 发送到网络服务:

DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(Employee));
MemoryStream ms = new MemoryStream();
serializer.WriteObject(ms, employee);
ms.Position = 0;
StreamReader sr = new StreamReader(ms);
StringContent jsonContent = new StringContent(sr.ReadToEnd(),
System.Text.Encoding.UTF8, "application/json");
// later I do HttpClient.PostAsync(uri, jsonContent)

这导致此 Content-Type header :

Content-Type: application/json; charset=utf-8

是否可以省略字符集而只使用以下 header ?

Content-Type: application/json

我没有看到执行此操作的 StringContent 的重载。

最佳答案

StringContent class 的新实例出现时通过

初始化
public StringContent(
string content,
Encoding encoding,
string mediaType
)

Content Type 的 HTTP 请求 header 生成如下:

Content-Type: application/json; charset=utf-8

Pay attention to the presence of encoding part ( charset=utf-8)

为了构造Content Type没有编码部分,可以考虑以下选项:

1) 使用 StringContent Constructor (String)并使用 ContentType property 设置内容类型,例如:

var requestContent = new StringContent(jsonContent);                
requestContent.Headers.ContentType = new MediaTypeWithQualityHeaderValue("application/json");

var requestContent = new StringContent(jsonContent);                
requestContent.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json");

2)ContentType property中删除编码部分,例如:

    var requestContent = new StringContent(jsonContent, System.Text.Encoding.UTF8, "application/json");
requestContent.Headers.ContentType.CharSet = null;

3) 创建自定义 JsonMediaTypeFormatter Class重置编码部分:

public class NoCharsetJsonMediaTypeFormatter : JsonMediaTypeFormatter
{
public override void SetDefaultContentHeaders(Type type, System.Net.Http.Headers.HttpContentHeaders headers, System.Net.Http.Headers.MediaTypeHeaderValue mediaType)
{
base.SetDefaultContentHeaders(type, headers, mediaType);
headers.ContentType.CharSet = null;
}
}

关于c# - 如何在没有字符集的情况下使用 DataContractJsonSerializer 在 C# 中发送 JSON?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16098573/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com