C# 忽略Json.NET自定义JsonConverter

C# 忽略Json.NET自定义JsonConverter,c#,asp.net-mvc,json,json.net,C#,Asp.net Mvc,Json,Json.net,我有一个泛型类,我只想用它的一个属性的值序列化它的子类 为此,我编写了一个定制的JsonConverter,并使用JsonConverter(Type)属性将其附加到基类中-但是,它似乎从未被调用过。作为参考,如下面的示例所示,我使用System.Web.Mvc.Controller.Json()方法序列化对象的列表 如果有更好的方法达到同样的效果,我绝对愿意接受建议 示例 查看功能 public JsonResult SomeView() { List foos=GetAListOfFoos(

我有一个泛型类,我只想用它的一个属性的值序列化它的子类

为此,我编写了一个定制的
JsonConverter
,并使用
JsonConverter(Type)
属性将其附加到基类中-但是,它似乎从未被调用过。作为参考,如下面的示例所示,我使用
System.Web.Mvc.Controller.Json()
方法序列化对象的
列表

如果有更好的方法达到同样的效果,我绝对愿意接受建议

示例

查看功能

public JsonResult SomeView()
{
List foos=GetAListOfFoos();
返回Json(foos);
}
自定义JsonConverter

class FooConverter:JsonConverter
{
公共重写void WriteJson(JsonWriter编写器、对象值、JsonSerializer序列化器)
{
System.Diagnostics.Debug.WriteLine(“这似乎从未运行过”);
//这可能不起作用-由于上述问题,我无法测试它。
serializer.Serialize(writer,(值为FooBase.attribute);
}
public override void ReadJson(JsonReader读取器,类型objectType,对象existingValue,JsonSerializer序列化程序)
{
抛出新的NotImplementedException();
}
公共覆盖布尔CanConvert(类型objectType)
{
System.Diagnostics.Debug.WriteLine(“这似乎也从未运行过”);
返回objectType.IsGenericType
&&objectType.GetGenericTypeDefinition()==typeof(FooBase);
}
}
Foo基类

[JsonConverter(typeof(FooConverter))]
公共抽象类FooBase
TBar的位置:类
TBaz:class在哪里
{
公共TBar属性;
}
Foo实施

公共类Foo:FooBase
{
// ...
}
电流输出

[
{“属性”:{…},
{“属性”:{…},
{“属性”:{…},
...
]
所需输出

[
{ ... },
{ ... },
{ ... },
...
]
文档说明: 要将JsonConverter应用于集合中的项,请使用JsonArrayAttribute、JsonDictionaryAttribute或JsonPropertyAttribute,并将ItemConverterType属性设置为要使用的转换器类型


也许这会有所帮助。

首先,System.Web.Mvc.Controller.Json()不适用于Json.NET—它使用的是对Json.NET内容一无所知的。如果您仍然想使用System.Web.Mvc.Controller.Json()调用,您应该执行以下操作。同时将
WriteJson
更改为:

public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
    serializer.Serialize(writer, ((dynamic)value).attribute);
}

我想这应该可以让你的代码正常工作。

发生在我身上的事情是,我按照Visual Studio的建议,使用
语句自动添加了
。错误地使用System.Text.Json.Serialization添加了


所以我在目标类上使用了
System.Text.Json.Serialization.jsonConverterateAttribute
。Json.Net(正确地)忽略了它。

我会看一看,谢谢。我花了很长时间浏览这些文档,但并不真正知道我在寻找什么。我的印象是它确实在寻找,尽管如果我错了也不会感到惊讶——也许是其他原因导致Json.NET成为依赖项。感谢这篇文章,我将对此进行阅读。ASP.NET WebApi使用JSON.NET作为JSON序列化程序,但ASP.NET MVC没有。我知道这很让人困惑。啊,应该是这样。我可以确认这是根本问题。谢谢你的帮助。