Учитывая следующий фрагмент кода, за исключением:JSON.NET TypeNameHandling.Auto для верхнего уровня
using System;
using Newtonsoft.Json;
namespace JsonTestje
{
class Other
{
public string Message2 { get; set; }
}
class Demo
{
public string Message { get; set; }
public Other Other { get; set; }
}
class Program
{
static void Main(string[] args)
{
var demo = new Demo
{
Message = "Hello, World!",
Other = new Other
{
Message2 = "Here be dragons!"
}
};
var settings = new JsonSerializerSettings
{
TypeNameHandling = TypeNameHandling.Auto,
Formatting = Formatting.Indented
};
var serialized = JsonConvert.SerializeObject(demo, settings);
Console.WriteLine(serialized);
}
}
}
Выход заключается в следующем:
{
"Message": "Hello, World!",
"Other": {
"Message2": "Here be dragons!"
}
}
Теперь, если я изменю TypeNameHandling
к TypeNameHandling.All
, выход становится этим:
{
"$type": "JsonTestje.Demo, JsonTestje",
"Message": "Hello, World!",
"Other": {
"$type": "JsonTestje.Other, JsonTestje",
"Message2": "Here be dragons!"
}
}
Но то, что я хочу это:
{
"$type": "JsonTestje.Demo, JsonTestje",
"Message": "Hello, World!",
"Other": {
"Message2": "Here be dragons!"
}
}
Причина заключается в том, что я хочу, чтобы иметь возможность сериализации кучу объектов и десериализации их позже, не зная, что они типа десериализации, но я также не хочу, чтобы загрязнить содержимое с этими $type
свойствами повсюду, где они не нужны.
Другими словами, я хочу TypeNameHandling.Auto
, за исключением корневого объекта. Как мне это сделать?