Как сохранить поля Json.Net по умолчанию, такие как $ id и $ type в пользовательском WriteJson в JsonConverter?

Моя ситуация:

У меня есть класс из библиотеки, у которой есть куча полей, которые мне не нужны, и вызывает проблемы при десериализации, мне нужно только одно из полей для сериализации и десериализации. Я понял! 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"
}
0
источник поделиться
1 ответ

Я понял. Если вы получите JsonSerializer ReferenceResolver, который передается в метод WriteJson, вы можете извлечь ссылочный идентификатор для объекта, который вы сериализуете с помощью этого:

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

Поскольку вы передаете "serializer" в качестве контекста, это относительная точка, из которой он получает идентификатор. Я буду использовать аналогичный метод, который будет опубликован в комментарии к моей начальной записи, чтобы получить тип.

0
источник

Посмотрите другие вопросы по меткам или Задайте вопрос