C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

■102768 / 3階層)  json文字列を整形しエスケープ済みのjson文字列の取得
□投稿者/ WebSurfer (2858回)-(2023/12/23(Sat) 18:59:14)
No102765 (ded さん) に返信

> ジェネリック型を指定せずに、Objectに代入後、
> 再度JsonSerializerOptionsで期待している形式に変換しました。

JSON 文字列をデシリアライズした結果の .NET のクラス定義が不定なら JsonElement 構造体
にデシリアライズしてはいかがですか?

また、デシリアライズする際の JsonSerializerOptions の設定は不要です。

以下のようにして、

Imports System.IO
Imports System.Text.Encodings.Web
Imports System.Text.Json

Module Module1

    Sub Main()
        Dim path As String = "質問の json を格納したファイルへのパス"
        Dim jsonText As String = ""

        Using sr As StreamReader = File.OpenText(path)
            jsonText = sr.ReadToEnd()
        End Using

        Dim jElem = JsonSerializer.Deserialize(Of JsonElement)(jsonText)

        Dim jsonIndented = JsonSerializer.Serialize(jElem, New JsonSerializerOptions With {
                .WriteIndented = True,
                .Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping
            })
        Console.WriteLine(jsonIndented)

    End Sub

End Module

結果は以下の通りとなります。

{
  "value": [
    {
      "Data1": "AIUEO",
      "Data2": "あいうえお",
      "Data3": "12345"
    },
    {
      "Data1": "Value",
      "Data2": "!\"#$%&'()-=^~\\\\|@{+*}<>?_",
      "Data3": "ABCDEF"
    }
  ]
}

JSON 文字列をデシリアライズした結果の .NET のクラス定義が決まっているなら、Visual Studio 
の機能を利用してクラス定義を生成し、それにデシリアライズすることもできます。

詳しくは以下の記事を見てください。

JSON 文字列から C# のクラス定義生成
http://surferonwww.info/BlogEngine/post/2020/05/10/generate-class-definition-from-json-string.aspx

編集キー/

前の記事(元になった記事) 次の記事(この記事の返信)
←Re[2]: json文字列を整形しエスケープ済みのjson文字列の取得 /ded →Re[4]: json文字列を整形しエスケープ済みのjson文字列の取得 /WebSurfer
→Re[4]: json文字列を整形しエスケープ済みのjson文字列の取得 /WebSurfer
 
上記関連ツリー

json文字列を整形しエスケープ済みのjson文字列の取得 / ded (23/12/23(Sat) 14:10) #102762
Re[1]: json文字列を整形しエスケープ済みのjson文字列の取得 / WebSurfer (23/12/23(Sat) 14:33) #102764
  └ Re[2]: json文字列を整形しエスケープ済みのjson文字列の取得 / ded (23/12/23(Sat) 15:05) #102765 解決済み
    └ json文字列を整形しエスケープ済みのjson文字列の取得 / WebSurfer (23/12/23(Sat) 18:59) #102768 ←Now
      ├ Re[4]: json文字列を整形しエスケープ済みのjson文字列の取得 / WebSurfer (23/12/23(Sat) 18:59) #102769 解決済み
      └ Re[4]: json文字列を整形しエスケープ済みのjson文字列の取得 / WebSurfer (23/12/24(Sun) 14:14) #102776 解決済み

上記ツリーを一括表示 / 上記ツリーをトピック表示
 
上記の記事へ返信