从未调用ASP.NET Web API自定义JsonConverter

发布时间:2020-02-14 发布网站:编程之家
编程之家收集整理的这篇文章主要介绍了从未调用ASP.NET Web API自定义JsonConverter编程之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
所以这是我的情况.我正在WebForms应用程序中实现一个WEB API.我有一堆动态类,基本上是字典,需要使用自定义 JSON序列化格式化程序才能正常工作(因为默认转换器只显示一堆键值配对).

所以首先我创建了一个自定义JSON转换器:

/// <summary>
/// A class to convert entities to JSON
/// </summary>
public class EntityJsonConverter : JsonConverter
{
    public override bool CanConvert(Type objectType)
    {
        return objectType.IsSubclassOf(typeof(Entity));
    }

    public override bool CanRead
    {
        get { return true; }
    }

    public override bool CanWrite
    {
        get { return true; }
    }

    public override void WriteJson(JsonWriter writer,object value,JsonSerializer serializer)
    {
        // Details not important. This code is called and works perfectly.
    }

    public override object ReadJson(JsonReader reader,Type objectType,object existingValue,JsonSerializer serializer)
    {
        // Details not important. This code is *never* called for some reason.
    }
}

一旦我定义了I,然后将其插入到全局JSON媒体类型格式化器中:

// Add a custom converter for Entities.
        foreach (var formatter in GlobalConfiguration.Configuration.Formatters)
        {
            var jsonFormatter = formatter as JsonMediaTypeFormatter;
            if (jsonFormatter == null)
                continue;

            jsonFormatter.SerializerSettings.Converters.Add(new EntityJsonConverter());
        }

最后,我的测试API(将来会有更多的添加,我只是试图测试系统,“联系人”继承自“实体”):

public class ContactController : ApiController
{
    public IEnumerable<Contact> Get()
    {
        // Details not important. Works perfectly.
    }

    [HttpPost]
    public bool Update(Contact contact)
    {
        // Details not important. Contact is always "null".
    }
}

所以这是我在调试时看到的内容:

网站呼叫“获取”:

> Controller.Get被调用.返回联系人列表.
>为枚举类型调用Converter.CanConvert.返回false.
>为Contact类型调用Converter.CanConvert.返回true.
>调用Converter.CanWrite.返回true.
>调用Converter.WriteJson.将正确的JSON写入流
>网站收到适当的JSON,并能够将其用作对象.

网站呼叫“更新”:

>为Contact类型调用Converter.CanConvert.返回true.
>调用Controller.Update. “contact”参数为“null”.

我完全感到困惑.我不明白为什么这在序列化时有效,但整个过程似乎只是在尝试反序列化时跳过我的自定义转换器.任何人都有任何想法,我做错了什么?

谢谢!

解决方法

阿吉兹现在我感到愚蠢.

…我没有在帖子数据中发送JSON.我不小心发了一堆混乱的文字.哎呦…

没关系!

总结

以上是编程之家为你收集整理的从未调用ASP.NET Web API自定义JsonConverter全部内容,希望文章能够帮你解决从未调用ASP.NET Web API自定义JsonConverter所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您喜欢交流学习经验,点击链接加入编程之家官方QQ群:1065694478
编程之家官方公众号

微信公众号搜索 “ 程序精选 ” ,选择关注!

微信公众号搜索 “ 程序精选 ”
精选程序员所需精品干货内容!