我有一个JSON文件,其结构如下。
{
title: {
title: "",
episode_title: ""
},
series: {
season: "",
episode: ""
}
content_description: {
???
}
}
,其中content_description可能具有以下格式之一:
content_description: {
language: "",
short_synapsis: "",
medium_synopsis: "",
long_synopsis: "",
oneliner: ""
}
OR
content_description: {
text: "",
category: "",
level: "",
source: ""
}
我想使用Newtonsoft Json.NET JsonConvert.DescializeObject(字符串值(方法将其序列化为C#模型。到目前为止,我已经创建了以下内容描述模型:
public class ContentDescriptions
{
public string language { get; set; }
public string short_synopsis { get; set; }
public string medium_synopsis { get; set; }
public string long_synopsis { get; set; }
public string short_season_synopsis { get; set; }
public string medium_season_synopsis { get; set; }
public string long_season_synopsis { get; set; }
public string short_episode_synopsis { get; set; }
public string medium_episode_synopsis { get; set; }
public string long_episode_synopsis { get; set; }
public string oneliner { get; set; }
public string text { get; set; }
public string category { get; set; }
public string level { get; set; }
public string source { get; set; }
}
这是可行的,但有没有一种方法可以将具有一个名称的元素序列化为两个模型中的一个,这取决于它的结构?例如,在我的根模型中有两个contentdescription模型字段,并填充其中一个,而另一个为空?
容器类能工作吗?
class MyAmazingClass {
ContentDescriptionsA A {get; set;}
ContentDescriptionsB B {get; set;}
}
然后您可以对这个类的对象进行串行化。
如果我从你有限的信息中正确理解,你希望得到一个可以是a或B的json字符串。你对B不感兴趣,因为它可以用null值或空实例化。
在这种情况下,您可以每次使用对象A(ContentDescriptionsA(进行反序列化。当内容为A的JsonString通过时,类的属性将被填充;如果对象为B,则属性将为null。
这里有一个简单的控制台应用程序,您可以重新构建它来处理这个概念。(旁注:您还可以创建一个类,该类包含两个JsonStrings的所有属性,但随后也将填充B的属性(
using System.Text.Json;
namespace TestJson
{
class Program
{
static void Main(string[] args)
{
var a = new ContentDescriptionsA() { language = "NederlandsA"};
var b = new ContentDescriptionsB() { text = "TextB" };
var jsonstringA = JsonSerializer.Serialize(a);
var jsonstringB = JsonSerializer.Serialize(b);
var deserializeA = JsonSerializer.Deserialize<ContentDescriptionsA>(jsonstringA); // properties of a FILLED, props of b NULL
var deserializeB = JsonSerializer.Deserialize<ContentDescriptionsA>(jsonstringB); // all properties NULL
}
}
public class ContentDescriptionsA
{
public string language { get; set; }
public string short_synopsis { get; set; }
public string medium_synopsis { get; set; }
public string long_synopsis { get; set; }
public string short_season_synopsis { get; set; }
public string medium_season_synopsis { get; set; }
public string long_season_synopsis { get; set; }
public string short_episode_synopsis { get; set; }
public string medium_episode_synopsis { get; set; }
public string long_episode_synopsis { get; set; }
public string oneliner { get; set; }
}
public class ContentDescriptionsB
{
public string text { get; set; }
public string category { get; set; }
public string level { get; set; }
public string source { get; set; }
}
}