using System;
using System.IO;
using Newtonsoft.Json;
public class PopulateTest
{
public static void Test()
{
JsonSerializer serializer = JsonSerializer.CreateDefault();
string json = "{\"Inner\":{\"Random\":\"a\",\"Value\":{\"num\":1}}}";
Outer outer = new();
using (StringReader reader = new(json)) {
serializer.Populate(reader, outer);
}
Console.Log(outer.Inner.Value.num);
}
}
public class Outer
{
public Outer() { }
public Inner Inner { get; set; }
}
public class Inner
{
[JsonConstructor]
protected Inner(string random)
{
Console.Log("Inner JSON constructor");
Random = random;
}
public string Random { get; }
public Value Value { get; } = new();
}
public class Value
{
public int num;
public Value() => Console.Log("Value constructor");
}
Вот пример кода, с которым я работаю. JSON {"Inner":{"Random":"a","Value":{"num":1}} выдает следующий результат:
Value constructor
Value constructor
Inner JSON constructor
0
Первый конструктор Value вызывается из библиотеки Json.Net из Newtonsoft.Json.Serialization.JsonSerializerInternalReader:CreateNewObject, а второй конструктор Value берется из начального значения.
Предполагаемое поведение заключается в том, чтобы заполнить значение, а не создавать новый объект, и, конечно же, для внешнего.Inner.Value.num будет равен 1 после десериализации. Однако при использовании конструктора по умолчанию (удаление случайной строки в качестве параметра для JsonConstructor Inner) он работает правильно. Результат этого:
Value constructor
Inner JSON constructor
1
Подробнее здесь: https://stackoverflow.com/questions/790 ... ng-in-json
Параметризованный конструктор, вызывающий неожиданное поведение при десериализации в Json.Net ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Параметризованный конструктор, вызывающий неожиданное поведение при десериализации в Json.Net
Anonymous » » в форуме C# - 0 Ответы
- 13 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Параметризованный конструктор, вызывающий неожиданное поведение при десериализации в Json.Net
Anonymous » » в форуме C# - 0 Ответы
- 10 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Параметризованный конструктор, вызывающий неожиданное поведение при десериализации в Json.Net
Anonymous » » в форуме C# - 0 Ответы
- 12 Просмотры
-
Последнее сообщение Anonymous
-