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

*** 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的序列化器必须实现两个接口:


RestSharp.Serializers.ISerializer
RestSharp.Serializers.IDeserializer


您必须包装来自Newtonsoft的序列化程序以使用这些接口键入。

我从事的一个项目中有一些工作代码:

/// <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/

10-13 05:16