gpt4 book ai didi

c# - 'RestClient' 不包含 'JsonSerializer' 的定义并且没有扩展方法 'JsonSerializer'

转载 作者:行者123 更新时间:2023-11-30 23:13:46 25 4
gpt4 key购买 nike

当我阅读最新 RestSharp 的 readme.txt 时:

*** IMPORTANT CHANGE IN RESTSHARP VERSION 103 ***

In 103.0, JSON.NET was removed as a dependency.

If this is still installed in your project and no other libraries depend on
it you may remove it from your installed packages.

There is one breaking change: the default Json*Serializer* is no longer
compatible with Json.NET. To use Json.NET for serialization, copy the code
from https://github.com/restsharp/RestSharp/blob/86b31f9adf049d7fb821de8279154f41a17b36f7/RestSharp/Serializers/JsonSerializer.cs
and register it with your client:

var client = new RestClient();
client.JsonSerializer = new YourCustomSerializer();

The default Json*Deserializer* is mostly compatible, but it does not support
all features which Json.NET has (like the ability to support a custom [JsonConverter]
by decorating a certain property with an attribute). If you need these features, you
must take care of the deserialization yourself to get it working.

我已经使用 nu 包管理器安装了 Newtonsoft.Json,我正在尝试将 Json.NET 注册到客户端变量,但没有成功。这是我的代码:

private void Form1_Load(object sender, EventArgs e)
{
var client = new RestClient("http://homestead.app/vendor");
client.JsonSerializer = new JsonSerializer(); <-- HERE IS THE ERROR
var request = new RestRequest("", Method.GET);
IRestResponse response = client.Execute(request);
var content = response.Content; // raw content as string
textBox1.Text = content;
}

client.JsonSerializer 属性不可用。

请帮助我。谢谢

最佳答案

RestSharp 的序列化程序必须实现两个接口(interface):

  • RestSharp.Serializers.ISerializer
  • RestSharp.Serializers.IDeserializer

您必须包装 Newtonsoft 的序列化程序才能使用这些接口(interface)进行键入。

我参与的一个项目中有工作代码:

/// <summary>
/// Default JSON serializer for request bodies
/// Doesn't currently use the SerializeAs attribute, defers to Newtonsoft's attributes
/// </summary>
/// <remarks>
/// Based on http://blog.patrickmriley.net/2014/02/restsharp-using-jsonnet-serializer.html
/// </remarks>
public class RestSharpJsonNetSerializer : RestSharp.Serializers.ISerializer, RestSharp.Deserializers.IDeserializer
{
private readonly JsonSerializer serializer;

/// <summary>
/// Default serializer
/// </summary>
public RestSharpJsonNetSerializer()
{
this.ContentType = "application/json";
this.serializer = new JsonSerializer
{
MissingMemberHandling = MissingMemberHandling.Ignore,
NullValueHandling = NullValueHandling.Include,
DefaultValueHandling = DefaultValueHandling.Include
};
}

/// <summary>
/// Default serializer with overload for allowing custom Json.NET settings
/// </summary>
public RestSharpJsonNetSerializer(JsonSerializer serializer)
{
this.ContentType = "application/json";
this.serializer = serializer;
}

/// <summary>
/// Unused for JSON Serialization
/// </summary>
public string DateFormat { get; set; }

/// <summary>
/// Unused for JSON Serialization
/// </summary>
public string RootElement { get; set; }

/// <summary>
/// Unused for JSON Serialization
/// </summary>
public string Namespace { get; set; }

/// <summary>
/// Content type for serialized content
/// </summary>
public string ContentType { get; set; }

/// <summary>
/// Serialize the object as JSON
/// </summary>
/// <param name="obj">Object to serialize></param>
/// <returns>JSON as String</returns>
public string Serialize(object obj)
{
using (var stringWriter = new StringWriter())
{
using (var jsonTextWriter = new JsonTextWriter(stringWriter))
{
jsonTextWriter.Formatting = Formatting.Indented;
jsonTextWriter.QuoteChar = '"';

this.serializer.Serialize(jsonTextWriter, obj);

var result = stringWriter.ToString();
return result;
}
}
}

public T Deserialize<T>(RestSharp.IRestResponse response)
{
using (var strReader = new StringReader(response.Content))
{
using (var jsonReader = new JsonTextReader(strReader))
{
var data = this.serializer.Deserialize<T>(jsonReader);
return data;
}
}
}
}

关于c# - 'RestClient' 不包含 'JsonSerializer' 的定义并且没有扩展方法 'JsonSerializer',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43485991/

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