相关疑难解决方法(0)

.net HttpClient与自定义JsonConverter

我正在使用.NET的HttpClient向WebAPI发出请求,该WebAPI返回一些需要在客户端进行一些自定义反序列化的JSON数据.为此,我已经制作了自己的JsonConverter,但我无法弄清楚如何让ReadAsAsync<T>方法获得转换器的存在.

我现在通过使用ReadAsStringAsync读取响应,然后将该字符串传递给我来解决我的问题JsonConvert.DeserializeObject,但似乎应该有一个更优雅的解决方案.

这是我的代码:

public PrefsResponse GetAllPrefs(string sid) {
    HttpClient client = CreateHttpClient(null, sid);
    var response = client.GetAsync("api/sites/" + sid).Result;

    // TODO : find a way to hook custom converters to this...
    // return response.Content.ReadAsAsync<PrefsResponse>().Result;

    var stringResult = response.Content.ReadAsStringAsync().Result;

    return JsonConvert.DeserializeObject<PrefsResponse>(stringResult, new PrefClassJsonConverter());
}
Run Code Online (Sandbox Code Playgroud)

这是我能做的最好的,还是有更优雅的方式?

这里也是我创建HttpClient的地方,如果那是我需要连接它的地方:

        private HttpClient CreateHttpClient(CommandContext ctx, string sid) {
        var cookies = new CookieContainer();

        var handler = new HttpClientHandler {
            CookieContainer = cookies,
            UseCookies = true,
            UseDefaultCredentials = false …
Run Code Online (Sandbox Code Playgroud)

.net json asp.net-web-api dotnet-httpclient

15
推荐指数
1
解决办法
9983
查看次数

用C#中的枚举值反序列化Dictionary &lt;string,object&gt;

我正在尝试序列化/反序列化Dictionary<string, object>C#。对象可以是任何可序列化的对象。

Json.NET几乎可以工作,但是如果字典中的值是an enum,则反序列化是不正确的,因为它反序列化为a longTypeNameHandling.All没有任何区别。

序列化库是否有其他快速解决方案。结果不必是JSON,而必须是文本。

我对传递到字典的数据也没有影响。我只需要对遇到的任何问题进行序列化和反序列化。

编辑:StringEnumConverter没有帮助。数据被转换回Dictionary<string, object>,因此解串器不知道序列化的值是enum。它像对待对象一样对待它,反序列化后StringEnumConverter它仍然是一个对象string。如果long没有转换器,它将反序列化。JSON.NET不会保留枚举。

我要提供的解决方案是现有接口的实现,该接口被注入到我无法更改的现有解决方案中。

EDIT2:这是我正在尝试做的一个例子

public enum Foo { A, B, C }
public enum Bar { A, B, C }
public class Misc { public Foo Foo { get; set; } }


var dict = new Dictionary<string, object>();
dict.Add("a", Foo.A);
dict.Add("b", Bar.B);
dict.Add("c", new Misc());

// serialize dict to a string s
// deserialize s …
Run Code Online (Sandbox Code Playgroud)

c# enums serialization

5
推荐指数
1
解决办法
1277
查看次数