NewtonソフトのJsonコードからマイクロソフトのJsonコードへの変更

NewtonソフトのJsonコンバータを採用しているコードからSystem.Text.Jsonへの更新作業手順概要

NewtonソフトのJsonコンバートツールからマイクソフト純正に変更する手順についてになります

実行結果のJsonデータをクリップボードにコピー

事前にブラウザ等からJsonフォーマット結果を取得する方法

ブラウザの表示結果をコピーしておいたり、サンプルフォーマットをコピーしておきます

実行中のデータを取得する方法

  • result変数に代入されている情報を取得します
  • 代入されている行の下あたりにブレークポイントを設定します
  • result変数に代入されている情報を取得します
  • アプリを実行し、ブレークポイントで止まったことを確認します
  • result変数にマウスカーソルをホバーすると、内容がポップアップされます
  • 表示からテキストビジュアライザーを選択します
  • テキストビジュアライザーが表示されます
  • CTL-A,CTL-Cのショートカット、または、右クリックメニューですべて選択して、クリップボードにコピーします

Jsonのデシリアライズのベースになるクラスを作成

デバッグを停止しておきます

クラスを作成する場所をクリックしておきます

編集メニューからJSONをクラスとして貼り付けるを選択します

Jsonデータから自動作成されたクラス

クラスが作成されますので、デフォルトのクラス名(Rootobject)をWeatherInfoに変更しておきます

public class WeatherInfo // Rootobjectから変更
{
    public string city { get; set; }
    public string weather { get; set; }
    public Location location { get; set; }
    public string percent { get; set; }
    public string Humidity { get; set; }
    public string temp { get; set; }
    public string wind { get; set; }
    public string pressure { get; set; }
    public string url { get; set; }
}

public class Location
{
    public string longitude { get; set; }
    public string latitude { get; set; }
}

Jsonデータから自動作成されたクラス(同じですが、コメントありにしてみました)

クラスが作成されますので、デフォルトのクラス名(Rootobject)をWeatherInfoに変更しておきます

// 天気情報を保持するクラス
public class WeatherInfo // Rootobjectから変更
{
    // 都市名
    public string city { get; set; }
    // 天気
    public string weather { get; set; }
    // 場所情報
    public Location location { get; set; }
    // 天気のパーセンテージ
    public string percent { get; set; }
    // 湿度
    public string Humidity { get; set; }
    // 温度
    public string temp { get; set; }
    // 風速
    public string wind { get; set; }
    // 気圧
    public string pressure { get; set; }
    // URL
    public string url { get; set; }
}

// 場所情報を保持するクラス
public class Location
{
    // 経度
    public string longitude { get; set; }
    // 緯度
    public string latitude { get; set; }
}

コードの変更

変更前

// 天気情報からアイコンのURLを取り出す
JObject jobj = JObject.Parse(result);
string todayWeatherIcon = (string)((jobj["url"] as JValue).Value);

変更後

WeatherInfoクラスのインスタンスを戻り値とするメソッドを呼びます
パッケージが足りないのでエラーになりますが、以降の処理でエラーにならないように処理します

// 天気情報からアイコンのURLを取り出す
WeatherInfo weatherInfo = JsonSerializer.Deserialize<WeatherInfo>(result);
string todayWeatherIcon = weatherInfo.url;

Newton.Jsonをアンインストール

パッケージ管理画面を表示

Newtonsoft.Jsonパッケージをアンインストール

インテリセンスでSystem.Text.Jsonパッケージのインストール

上記のパッケージ管理画面からでもインストールできますが、ここではインテリセンスを用いた方法を示します

実行結果の確認

では、実行してみて問題ないかを確認してみましょう

応用

Labelを1つフォームに置いて、そこにcity情報を表示してみましょう

string city = weatherInfo.city;
label1.Text = city;

おまけ

C#の習慣として、プロパティ名はPascal形式(先頭文字は大文字)としたいところです
VisualStudioには上記のような自動的にJsonデータからクラスを作成できる機能がありますが、外部のブラウザでフリーのツールがありますので、そちらが細かな設定ができますのでおすすめです
情報を追記しておきますので、本格的に進めたい時は参考にしてください