.net 解析json.field可以是纯文本和对象

u3r8eeie  于 2022-12-24  发布在  .NET
关注(0)|答案(2)|浏览(101)

不久,我试图创建一些网络API应用程序,我解析电报数据,我面临着一个问题。
当我得到所有的JSON时,我发现程序无法解析它,因为一些字段(文本)无法解析对象(下面的代码片段)。我正在考虑创建一个自定义JSON转换器(这很烦人,所以这就是我在这里的原因),但也许我只是不知道如何正确地做它。
以下是一些例子:

{
   "text": "SOME VERY VERY VERY PRIVATE INFORMATION",
},

以及

{
 "text": [
    {
     "type": "link",
     "text": "SOME VERY VERY VERY PRIVATE LINK :D(probably, onlyfans)"
    }
   ],
}
8ulbf1ek

8ulbf1ek1#

在这种情况下我通常使用JsonConstructor,你不需要把所有的属性都传递给构造函数,你可以只传递那些会引起问题的属性。

using Newtonsoft.Json;

    Data data = JsonConvert.DeserializeObject<Data>(json);

public class Data
{
    public List<Text> text { get; set; }

    [JsonConstructor]
    public Data(JToken text)
    {
        if (text.Type == JTokenType.String)
            this.text = new List<Text> { new Text { text = (string)text } };
        else this.text = text.ToObject<List<Text>>();
    }
}

public class Text
{
    public string type { get; set; }
    public string text { get; set; }
}
qvtsj1bj

qvtsj1bj2#

我将使用system.text.jsonMore info herehere

public class Data
{
    [JsonPropertyName("text")]
    public IEnumerable<TextInformation> TextInformations{ get; set; }
}

public class TextInformation
{
    [JsonPropertyName("type")]
    public string Type { get; set; }
    [JsonPropertyName("text")]
    public string Text { get; set; }
}

像这样使用它

var text = JsonSerializer.Deserialize<Data>(jsonString)

相关问题