C# 使用JsonObjectAttribute设置ItemTypeNameHandling

C# 使用JsonObjectAttribute设置ItemTypeNameHandling,c#,.net,json.net,asp.net-web-api2,C#,.net,Json.net,Asp.net Web Api2,我正试图让Json.NET序列化一个对象,并包括它的类型,如下所示 [JsonObject(ItemTypeNameHandling = TypeNameHandling.All)] public class ABC { public string Easy; public string As; } …以下测试 ABC abc = new ABC(); abc.Easy = "123";

我正试图让Json.NET序列化一个对象,并包括它的类型,如下所示

    [JsonObject(ItemTypeNameHandling = TypeNameHandling.All)]
    public class ABC
    {
        public string Easy;
        public string As;
    }
…以下测试

        ABC abc = new ABC();
        abc.Easy = "123";
        abc.As = "do rey me";

        string output = JsonConvert.SerializeObject(abc);
…输出是

{“简单”:“123”,“作为”:“做我”}

…我希望

{“$type”:“MyTest+ABC,MyTest”,“Easy”:“123”,“As”:“dorey me”}

我正试图使选定的合同在WebAPI2项目中包含类型信息。除了在全球范围内设置外,没有其他方法可以做到这一点吗?就像这样

config.Formatters.JsonFormatter.SerializerSettings.TypeNameHandling = Newtonsoft.Json.TypeNameHandling.All

获取或设置序列化集合项时使用的类型名称处理。它不控制类型本身的类型名称处理。看一看答案和答案。这两种都能满足你的需要吗?这两种似乎对我都没用。我有大量的类型,我需要包括类型…还有大量我不想要的类型。它可能会说ItemTypeNameHandling只适用于集合。然而,ItemTypeNameHandling是JsonObjectAttribute上的一个有效参数,它仅在类、结构和接口上有效。我还没有测试它,但我猜这将适用于对象中的所有集合。我的工作是在集合中包装我想要序列化类型的对象“我没有测试它,但我猜这将适用于对象中的所有集合”我猜如果测试它,您会发现
ItemTypeNameHandling
仅适用于集合属性,而
typenameholling
可能会按照您希望的方式工作