C#
 Computer >> コンピューター >  >> プログラミング >> C#

Newtonsoft.JsonでXMLとJSONを相互変換する方法|SerializeXmlNodeとDeserializeXmlNodeの使い方

Json.NET(Newtonsoft.Json)では、XmlNodeConverter を利用することで、JSON と XML を簡単に相互変換できます。

変換の際には、要素・属性・テキスト・コメント・文字データ・処理命令・名前空間・XML宣言といった情報がすべて保持されるため、両形式の間でデータをやり取りしても構造や内容が失われません。

SerializeXmlNode:XMLからJSONへ変換する

JsonConvert クラスには、JSON と XML を相互変換するためのヘルパーメソッドが2つ用意されています。

1つ目が SerializeXmlNode() です。このメソッドは XmlNode オブジェクトを受け取り、JSON テキストへとシリアライズします。

DeserializeXmlNode:JSONからXMLへ変換する

2つ目が DeserializeXmlNode() です。こちらは JSON テキストを受け取り、XmlNode オブジェクトへとデシリアライズします。

変換時の対応ルール

XmlNodeConverter による変換では、主に以下のようなマッピングが行われます。

  • XMLの要素 → JSONのプロパティ
  • 属性 → 「@」プレフィックス付きのキー(例:@id)
  • テキストノード → 「#text」というキー
  • XML宣言 → 「?xml」というキー

サンプルコード1:XMLをJSONに変換する

static void Main(string[] args) {
    string xml = @"<person id='1'>
        <name>Alan</name>
        <url>https://www.google1.com</url>
        <role>Admin1</role>
    </person>";

    XmlDocument doc = new XmlDocument();
    doc.LoadXml(xml);

    string json = JsonConvert.SerializeXmlNode(doc);
    Console.WriteLine(json);
    Console.ReadLine();
}

出力結果

{"person":{"@id":"1","name":"Alan","url":"https://www.google1.com","role":"Admin1"}}

id 属性が「@id」というキーに、各子要素が同名のプロパティにマッピングされていることが分かります。

サンプルコード2:JSONをXMLに変換する

static void Main(string[] args) {
    string json = @"{
    '?xml': {
      '@version': '1.0',
      '@standalone': 'no'
    },
    'root': {
      'person': [
        {
          '@id': '1',
          'name': 'Alan',
          'url': 'https://www.google1.com'
        },
        {
          '@id': '2',
          'name': 'Louis',
          'url': 'https://www.yahoo1.com'
        }
      ]
    }
  }";

    XmlDocument doc = (XmlDocument)JsonConvert.DeserializeXmlNode(json);
    Console.WriteLine(doc.OuterXml);
    Console.ReadLine();
}

出力結果

<?xml version="1.0" standalone="no"?>
<root>
  <person id="1">
    <name>Alan</name>
    <url>https://www.google1.com</url>
  </person>
  <person id="2">
    <name>Louis</name>
    <url>https://www.yahoo1.com</url>
  </person>
</root>

配列として記述された person は、同名の要素が複数並ぶ形で復元されます。「?xml」や「@」プレフィックスが、それぞれ XML宣言・属性として正しく変換されている点にも注目してください。

まとめ

Newtonsoft.Json を使えば、SerializeXmlNode()DeserializeXmlNode() の2つのメソッドだけで、XML と JSON の相互変換が実現できます。パッケージは NuGet から「Newtonsoft.Json」を検索してインストールできます。レガシーな XML システムと JSON ベースの API を連携させたい場合などに、ぜひ活用してみてください。

  1. 【Android】GSONライブラリを使ってHashMapをJSONに変換する方法

    GSONはGoogleが提供するJava向けライブラリで、JavaオブジェクトをJSONへ、あるいはJSONをオブジェクトへ相互に変換するために使われます。内部ではシリアライズ(直列化)とデシリアライズ(復元)の仕組みによって動作しています。 この記事では、GSONライブラリを使用してAndroidアプリ内でHashMapをJSON形式に変換する方法を、ステップごとにわかりやすく解説します。 ステップ1:新規プロジェクトを作成する まず、Android Studioで新しいプロジェクトを作成します。メニューバーから「File」⇒「New Project」を選択し、必要な項目をすべて入力してプロ

  2. JSONをExcelに変換する方法!Power Queryとオンラインツールの使い方を徹底解説

    JSON(JavaScript Object Notation)は、さまざまな種類のデータを保存するために広く利用されているデータ形式です。データの保存だけでなく、2つのサーバー間でデータをやり取りする際にも活用されており、APIなどを通じてWebサーバーと通信する場面でよく目にします。JSONファイルの構造は非常にシンプルで、配列とオブジェクトで構成されています。典型的なJSONファイルでは、キーと値のペアが配列内の各オブジェクトに格納されており、インデックスとキーを指定することで目的のデータにアクセスできます。プログラマーや開発者にとってJSONの構造はごく基本的なものですが、一般ユーザー