コード
Json
object 形式をテキスト表現するフォーマットの一つ。
変換表
JsonSerializerOptions
JsonElement
@see
C#, JSON形式でのシリアライズ
JavaScript, 配列型のJSON
MySQL, Json型の取り出し
using System.Text.Json;
using System.Text.Json.Serialization;
var r0 = new MyData()
{
c1 = "ABC",
c2 = new MyData2()
{
c3 = 123,
},
}
var jso = new JsonSerializerOptions ();
jso.DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull;
var r0s = JsonSerializer.Serialize ( r0, jso );
var r0d = JsonSerializer.Deserialize<mydata?> ( r0s );
Json
object 形式をテキスト表現するフォーマットの一つ。
| code | description |
|---|---|
| {} | object 単位を示す |
| [] | リスト構造を示す |
| : | key = value の区切り記号 |
{
"c1":"ABC",
"c2":
{
"c3":123
}
}
変換表
| json | C# code |
|---|---|
{
"c1":"123",
"c2":123
} | //key=valueの関係
class obj1
{
public string c1 {get;set;} = "123";
public int c2 {get;set;} = 123;
}
|
{
"c1":
{
"c1":"2026-01-10T16:22:53.0920467+09:00"
}
} | //object in object
class obj1
{
public obj2 c1 {get;set;} = new obj2();
}
public class obj2
{
public DateTime c1 {get;set;} = DateTune.Now;
}
|
{
"c1":["A1","A2","A3"],
"c2":[123,456,789],
"c3":{"1":"A1","2":"A2"},
} | //list value
class obj1
{
public List<string> c1 { get; set; } = new List<string> () { "A1","A2","A3", };
public int[] c2 { get; set; } = new[] { 123, 456, 789 };
public Dictionary<int, string> c3 { get; set; } = new Dictionary<int, string> () { { 1, "A1" }, { 2, "A2" } };
|
{
"c1":
{
"1":["C1","C2","C3"],"2":["D1","D2","D3"]
}
} | //dictionary + list
class obj1
{
public Dictionary<int, List<string>> c1 { get; set; } = new Dictionary<int, List<string>> () {
{ 1, new List<string> {"C1","C2","C3"} },
{ 2, new List<string> {"D1","D2","D3"} } };
}
|
{
"c5":
{
"c1":[["A1","A2","A3"],["B1","B2","B3"]],
"c2":[["A1","A2","A3"],["B1","B2","B3"]]
}
} | object
class obj1
{
public object c1 { get; set; } = new obj2 ();
}
public class obj2
{
public List<List<string>> c1{ get; set; } = new List<List<string>> (){new List<string>{"A1", "A2", "A3", },new List<string>{"B1", "B2", "B3", }};
public List<string[]> c2{ get; set; } = new List<string[]>(){new []{"A1","A2","A3"},new []{"B1","B2", "B3"}};
}
|
{
"\u30C6\u30B9\u30C8\u5217":"\u3042\u3044\u3046\u3048\u304A"
}
//これを変換するには以下のコードで Un Escape する。
Regex.Unescape ( text );
| //日本語。
class obj1
{
[JsonPropertyName("テスト列")]
public object c1 { get; set; } = "あいうえお";
}
|
Regex.Unescape ( text );
//Unescapeの結果。
{
"c1":
{
"テスト列":"あいうえお"
}
} | //JsonElement
class obj1
{
public object c1 { get; set; } = JsonElement.Parse ( "{\"テスト列\":\"あいうえお\"}" );
}
|
JsonSerializerOptions
| property | description |
|---|---|
| AllowTrailingCommas(false) | 末尾にカンマを付与するかどうか |
| Encoder | 文字エスケープしない範囲を指定する JavaScriptEncoder.Createで除外するunicodeの範囲を指定する |
| DefaultIgnoreCondition(never) | JsonIgnoreAttributeの参照を指定する 0: IgnoreNullValuesを参照 1: Always 常に無視 2:WhenWritingDefault 規定値の場合に無視 3:WhenWritingNull nullの場合に無視 |
| IgnoreNullValues(false) | obsolete. |
| IncludeFields(field) | fieldも入出力の対象 |
| IndentCharacter(whitespace) | インデントする時の文字 WriteIndented=trueの場合に有効 |
| IndentSize(2) | インデント文字数 |
JsonElement
var obj1 = JsonElement.Parse ( "{\"C1\":\"ABC\",\"C2\":123,\"列3\":\"あいう\"}" );
//
var zzz = obj1.EnumerateObject ();
foreach( var zz in zzz )
{
Console.WriteLine ( $"{zz.Name}={zz.Value}" );
}
//
var xxx = obj1.GetProperty ( "列3" );
var xx = xxx.GetString ();
Console.WriteLine ( $"[{obj2.GetPropertyCount()}] {xxx.ValueKind} ==> {xxx.GetString ()}");
//
C1=ABC
C2=123
列3=あいう
[3] String ==> あいう
@see
C#, JSON形式でのシリアライズ
JavaScript, 配列型のJSON
MySQL, Json型の取り出し