[C#][VB.NET] XML・JSONの相互変換

[C#][VB.NET] XML・JSONの相互変換

XMLとJSONを相互に変換する方法

JSON.NET を使えばXML形式のデータと、JSON形式のデータを相互に変換することが簡単にできます。Nugetで JSON.NET と検索してインストールすれば準備完了です。

XML・JSONの相互変換ツールで動作確認ができます。

仮に次のXMLとJSONを相互に変換します。

XML

<?xml version="1.0" encoding="utf-8"?>
<Users>
  <User id="001">
    <name>太郎</name>
    <age>30</age>
  </User>
  <User id="002">
    <name>次郎</name>
    <age>20</age>
  </User>
  <User id="003">
    <name>三郎</name>
    <age>10</age>
  </User>
</Users>

JSON

{
  "?xml": {
    "@version": "1.0",
    "@encoding": "utf-8"
  },
  "Users": {
    "User": [
      {
        "@id": "001",
        "name": "太郎",
        "age": "30"
      },
      {
        "@id": "002",
        "name": "次郎",
        "age": "20"
      },
      {
        "@id": "003",
        "name": "三郎",
        "age": "10"
      }
    ]
  }
}

[C#][VB.NET]サンプルコード

XMLからJSONへの変換、JSONからXMLへの変換、それからついでに適当なオブジェクトからJSONへの変換を行います。
変換結果は上のデータのとおり変換されます。

短いコードで簡単にデータを変換出来ているのが確認できます。他にもいろいろシリアライズ・デシリアライズが可能ですがよく使うのはこんな感じでしょうか。

C#

using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.IO;
using System.Xml.Linq;

namespace XmlJsonTest
{
    class XmlJson
    {
        // XML => JSON
        public static void XmlToJsonSample()
        {
            var fileName = @"files\user.xml";
            var xdoc = XDocument.Load(fileName);
            // XDocumentをJSON形式の文字列に変換
            var json = JsonConvert.SerializeXNode(xdoc, Formatting.Indented);
            Console.WriteLine(json);
        }

        // JSON => XML
        public static void JsonToXmlSample()
        {
            var json = string.Empty;
            var fileName = @"files\user.json";
            using (var reader = new StreamReader(fileName))
            {
                json = reader.ReadToEnd();
            }
            // JSON形式の文字列をXDocumentに変換
            var xdoc = JsonConvert.DeserializeXNode(json);
            Console.WriteLine(xdoc.Declaration);
            Console.WriteLine(xdoc.ToString());
        }

        // Object => JSON
        public static void ObjectToJson()
        {
            var obj = new List<object>(){
                new { Name = "太郎", Age = 30 },
                new { Name = "次郎", Age = 20 },
                new { Name = "三郎", Age = 10, Sex="男" }
            };
            var json = JsonConvert.SerializeObject(obj, Formatting.Indented);
            Console.WriteLine(json);
        }
    }
}

VB.NET

Imports System.IO
Imports Newtonsoft.Json

Public Class XmlJson
    ' XML => JSON
    Public Shared Sub XmlToJsonSample()
        Dim fileName As String = "files\user.xml"
        Dim xdoc As XDocument = XDocument.Load(fileName)
        Dim json = JsonConvert.SerializeXNode(xdoc, Formatting.Indented)
        Console.WriteLine(json)
    End Sub

    ' JSON => XML
    Public Shared Sub JsonToXmlSample()
        Dim json As String = String.Empty
        Dim fileName As String = "files\user.json"
        Using reader As New StreamReader(fileName)
            json = reader.ReadToEnd
        End Using
        ' JSON形式の文字列をXDocumentに変換
        Dim xdoc As XDocument = JsonConvert.DeserializeXNode(json)
        Console.WriteLine(xdoc.Declaration)
        Console.WriteLine(xdoc.ToString())
    End Sub

    ' Object => JSON
    Public Shared Sub ObjectToJson()
        Dim obj = New List(Of Object)() From {
            New With {.Name = "太郎", .Age = 30},
            New With {.Name = "次郎", .Age = 20},
            New With {.Name = "三郎", .Age = 10, .Sex = "男"}
        }
        Dim json As String = JsonConvert.SerializeObject(obj, Formatting.Indented)
        Console.WriteLine(json)
    End Sub
End Class

参考URL

C#カテゴリの最新記事