System.Text.Json で独自クラスのリストをSerializeしたのですが、中身が空っぽになってしまいました。
System.Text.Json は NuGet パッケージでインストールしてあります。
c#
1using System.Text.Json; 2using System.Text.Json.Serialization; 3/* 略 */ 4 5 public class Question 6 { 7 public string description; 8 public List<string> Options = new List<string>(); 9 public Question() { } 10 } 11 12/* 略 */ 13 var qs = new List<Question>(); 14 /* qsに色々入れる */ 15 var j = JsonSerializer.Serialize<List<Question>>(qs);
この結果、jの中身は
"[{},{}]"
です。
Listには2つQuestionを入れたので、中身2つのListだよ、というところまでは認識している様子ですが、
中身が空っぽになってしまいました。
何が足りないのでしょうか?
その後:
.Net Framework 4.7.2
.NET Core 3.1
で、同じことを試した結果、上記と同じ結果になりました。
さらに試した事:
c#
1 var j1 = JsonSerializer.Serialize<List<Question>>(qs); 2 var j2 = JsonSerializer.Serialize<Question[]>(qs.ToArray()); 3 var j3 = JsonSerializer.Serialize<Question>(qs[0]); 4 var j4 = JsonSerializer.Serialize<Object>(qs[0]); 5 var j5 = JsonSerializer.Serialize(qs[0]); 6 var j6 = JsonSerializer.Serialize(qs);
これら全て空になりました。
コンソールアプリ .NET Core 3.1 で書き直したものはこちらです。
c#
1namespace ConsoleApp2 2{ 3 public class Question 4 { 5 public string description; 6 public List<string> Options = new List<string>(); 7 public Question() { } 8 } 9 10 class Program 11 { 12 static void Main(string[] args) 13 { 14 var qs = new List<Question>(); 15 /* qsに色々入れる */ 16 var q = new Question(); 17 q.description = "aa"; 18 q.Options = new List<string> { "a11", "a12", "a13", "a14", }; 19 qs.Add(q); 20 q = new Question(); 21 q.description = "bb"; 22 q.Options = new List<string> { "b11", "b12", "b13", "b14", }; 23 qs.Add(q); 24 25 var j = JsonSerializer.Serialize<List<Question>>(qs); 26 var j2 = JsonSerializer.Serialize<Question>(qs[0]); 27 var j3 = JsonSerializer.Serialize(qs); 28 var j4 = JsonSerializer.Serialize(qs[0]); 29 Console.WriteLine(j); 30 Console.WriteLine(j2); 31 Console.WriteLine(j3); 32 Console.WriteLine(j4); 33 } 34 } 35}
環境: Windows 10, Microsoft Visual Studio Community 2019, .Net Framework 4.6.1
回答1件
あなたの回答
tips
プレビュー