Top / JSON / DynamicJSON / C#からJSONへいろんな変換

JSON/Json-libを使う/JavaからJSONへいろんな変換 ではJavaからJSONへいろいろ変換してみましたが、次に、C#からJSONへ変換してみます。

Javaでやったときとほぼ同様の以下のような親子モデルで、ネストしたオブジェクトが正しく変換されるか、配列やListやSetなどが正しく変換されるか試してみます。

public class Parent
{
    public int id { get; set; }
    public string name { get; set; }
    public Child child { get; set; }
    //public String toString()
    //{
    //return new ToStringBuilder(this).
    //append("id", getId()).append("name",
    //getName()).append("child", getChild()).toString();
    //}
}
public class Child
{
    public string name { get; set; }
    //public String toString()
    //{
    //return new ToStringBuilder(this)
    //.append("name", getName()).toString();
    //}
}

ネストしたオブジェクト

class Program
{
    static void Main(string[] args)
    {
        Child child = new Child { name = "子の名前" };
        Parent parent = new Parent { id = 0, name = "親の名前", child = child };

        var json = DynamicJson.Serialize(parent);
        Console.WriteLine(json);
    }
}

結果

{"id":0,"name":"親の名前","child":{"name":"子の名前"}}

{"フィールド名":value}というJSON形式に変換されました。Childクラスであるchildフィールドも、ちゃんとネストして変換されていますね。

IList

IListを追加しました。

public class Parent
{
    public int id { get; set; }
    public string name { get; set; }
    public IList<Child> children { get; set; }
    //public Child child { get; set; }
}

これでやってみると、、

class Program
{
    static void Main(string[] args)
    {
        var children = new List<Child>();
        children.Add(new Child { name = "子の名前" });
        children.Add(new Child { name = "子の名前" });
        Parent parent = new Parent { id = 0, name = "親の名前", children = children };

        var json = DynamicJson.Serialize(parent);
        Console.WriteLine(json);
    }
}

結果

{"id":0,"name":"親の名前","children":[{"name":"子の名前"},{"name":"子の名前"}]}

childrenフィールドは

"children":[{"name":"子の名前"},{"name":"子の名前"}]

というように配列表現に変換されていますね。まあ想定通りですね。

配列

Listを配列にしました。

public class Parent
{
    public int id { get; set; }
    public string name { get; set; }
    public Child[] children { get; set; }
}

これでやってみると、

class Program
{
    static void Main(string[] args)
    {
        Child[] children = new Child[] {
            new Child { name = "子の名前" },
            new Child { name = "子の名前" }
        };
        Parent parent = new Parent { id = 0, name = "親の名前", children = children };

        var json = DynamicJson.Serialize(parent);
        Console.WriteLine(json);

    }
}

結果

{"id":0,"name":"親の名前","children":[{"name":"子の名前"},{"name":"子の名前"}]}

配列childrenは

"children":[{"name":"子の名前"},{"name":"子の名前"}]

となり、JSONの配列になっていますね。

Dictionary

配列を、Dictionaryに変えてみます

public class Parent
{
    public int id { get; set; }
    public string name { get; set; }
    public IDictionary<string, Child> children { get; set; }
}

これでやってみます

class Program
{
  static void Main(string[] args)
  {
    var children = new Dictionary<string, Child>();
    children.Add("child1", new Child() { name = "子の名前1" });
    children.Add("child2", new Child() { name = "子の名前2" });

    Parent parent = new Parent { id = 0, name = "親の名前", children = children };

    var json = DynamicJson.Serialize(parent);
    Console.WriteLine(json);
  }
}

結果

{"id":0,"name":"親の名前",
 "children":[
   {"Key":"child1","Value":{"name":"子の名前1"}},
   {"Key":"child2","Value":{"name":"子の名前2"}}
   ]
}(整形してます)

JavaとJson-libの時

{"name":"親の名前","id":0,
 "children":{"child1":{"name":"子の名前"},
             "child2":{"name":"子の名前"}
            }
} (整形してます)

だったので、ちょっと違うみたいですね


この記事は

選択肢 投票
おもしろかった 12  
そうでもない 0  

Top / JSON / DynamicJSON / C#からJSONへいろんな変換

現在のアクセス:12596


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-03-17 (土) 15:18:36 (605d)