0

对不起我的英语不好。

我从这个文档中成功运行了代码。我得到了新的 JSON 数据,还有另一个问题。

JSON 数据的定义如下:

{
    "id": 3,
    "title": "aaa",
    "typeDiscriminator": "search",
    "settingDataTemp": {
      "id": 11,
      "type": "11",
      "value": "11"
    }
}

POCO 类定义为:

public class RootContent
{
    public int id { get; set; }
    public string title { get; set; }
    public PageModuleType typeDiscriminator { get; set; }
    public IPageSubContentSetting settingDataTemp { get; set; }
}

我想反序列settingDataTemp化对象,所以JsonConverter Read方法像

public override IPageSubContentSetting Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
    PageModuleType typeDiscriminator;
    string rawText;
    var discriminatorPropName = nameof(RootContent.typeDiscriminator);

    using (var jsonDocument = JsonDocument.ParseValue(ref reader))
    {
        if (!jsonDocument.RootElement.TryGetProperty(discriminatorPropName, out var typeProperty))
        {
             throw new JsonException();
        }

        var result = Enum.TryParse(typeProperty.GetString(), true, out typeDiscriminator);

        if (!result)
        {
             throw new JsonException();
        }

        rawText = jsonDocument.RootElement.GetRawText();
     }
}

无法从中获取typeDiscriminatorJsonDocument.RootElement因为它是在外部对象上定义的。

有什么方法可以获取typeDiscriminator价值吗?

4

1 回答 1

0

我解决了问题,只需使用 NewtonSoft.Json 来编辑 JSON 结构并将typeDiscriminator值从根复制到settingDataTemp元素。

于 2020-05-05T03:26:06.640 回答