如何在JsonConverter中的自定义WriteJson中保留$ id和$ type之类的默认Json.Net字段?

时间:2018-09-07 21:01:38

标签: c# json.net

我的情况:

我从一个库中获得了一个类,该类具有一堆我不需要的字段,并且会导致反序列化问题,我只需要其中一个字段即可进行序列化和反序列化。我懂了! JsonConverter可以解决问题,对吗?因此,我想使用JsonConverter序列化和反序列化对象,但是我的问题是我想保留Json.Net生成的“标头”内容,例如“ $ id”和“ $ type”,因为它的序列化方式与其他对象类似。我不知道要在序列化中找到当前位置的$ id,因此我可以使用一些帮助!

    public override void WriteJson(JsonWriter writer, object v, JsonSerializer serializer)
    {
        MyObject myObject = (MyObject)v;
        string myCoolString = myObject.myString;

        MyObjectSerialized myObjectSerialized = new MyObjectSerialized()
        {
            myString = myCoolString 
        };

        JObject jo = JObject.FromObject(myObjectSerialized);

        jo.WriteTo(writer);
    }

输出:

{
    "myString":"test"
}

预期输出:

{
    "$id":"34",
    "$type":"MyObject, Assembly-CSharp",
    "myString":"test"
}

1 个答案:

答案 0 :(得分:0)

我知道了。如果获得传递给WriteJson方法的JsonSerializer的ReferenceResolver,则可以使用以下方法将引用ID提取到要序列化的对象中:

string id = serializer.ReferenceResolver.GetReference(serializer, v);

由于您要传递“ serializer”作为上下文,因此这是从中获取ID的相对点。我将使用与最初帖子的评论中发布的方法类似的方法来获取类型。