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
コメントを書く