Я знаю, что это существует: JsonConvert.PopulateObject, но это не так. сделай свое дело, будь со мной.
Код: Выделить всё
// MainData, a class we will let Json.net instanciate
public class MainData
{
[JsonProperty]
private List _smallerDataArray = new();
}
// SmallerData, a class we do not want Json.net to instanciate
public class SmallerData
{
public int myInt;
}
Код: Выделить всё
{
"$type":"MainData",
"_smallerDataArray":
{
"$type":"List"
[
{
"$type":"SmallerData",
"myInt":"0"
},
{
"$type":"SmallerData",
"myInt":"1"
},
{
"$type":"SmallerData",
"myInt":"2"
}
]
}
}
Код: Выделить всё
public static MainData DeserializeNormaly(string jsonString)
{
// here Json.net will create 3 SmallerData instances via RTTI
return JsonConvert.DeserializeObject(jsonString);
}
Код: Выделить всё
public class Example
{
// Creating a pool of 3 SmallerData for the example's sake
List _pooledData = new() { new SmallerData(), new SmallerData(), new SmallerData());
public object MyObjectFactory(Type objectType)
{
if(objectType == typeof(SmallerData))
{
// Detecting a type we can instaniate from a pool
SmallerData smallerDataInstance = _pooledData[0];
_pooledData.RemoveAt(0);
return smallerDataInstance;
}
// Relying of default object creation
return null;
}
public MainData DeserializeFromPool(string jsonString)
{
JsonSerializerSettings settings = new();
settings.ObjectFactory = MyObjectFactory;
// here Json.net will create 3 SmallerData instances via RTTI
return JsonConvert.DeserializeObject(jsonString, settings);
}
}
Я изучал контракты преобразователей, что такое еще много чего, но не нашел способа. Кто-нибудь пробовал это раньше?
Если вам интересно, почему я пытаюсь это сделать: это одна из многих попыток, которые я предпринимаю, чтобы уменьшить количество мусора во время использования json.< /п>
Подробнее здесь: https://stackoverflow.com/questions/791 ... ub-objects
Мобильная версия