異邦人になってみた~上海の人 

読者です 読者をやめる 読者になる 読者になる

異邦人になってみた~上海の人 

上海在住です。中国時代劇をよく見ています、中国旅行の事、weiboやQQの設定、一眼レフカメラの写真掲載、上海での日々の生活情報を書いています

 記事一覧表示
スポンサーリンク

C#で標準のJSONを使うときにはまったこと。

プログラム C#

ドットネットフレームワークは4.0を使用しています。

どのアセンブリがどのクラスをサポートしているのかぜんぜんわかりません。
簡単にわかる方法があればいいんでしょうけど。
System.Runtime.Serialization.Jsonを使えと言うことらしいんですが、
型または名前空間名 'Json' は名前空間 'System.Runtime.Serialization' に存在しません。アセンブリ参照が不足しています。
型または名前空間名 'DataContract' が見つかりませんでした。
下の3つを参照に追加しないとだめみたいです。
System.Runtime.Serialization
System.ServiceModel
System.ServiceModel.Web



JSONの定義を作成する。

using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;
using System.Text;

namespace WindowsFormsApplication1
{
  [DataContract]
  class ResPonseJData
  {
    //JSONの型にあわせてクラスを作成
    //{"result":"0","ip":"192.168.1.1","channeAddressId":"1","port":"7219"}
    [DataMember]
    public string channeAddressId;
    [DataMember]
    public string ip;
    [DataMember]
    public string result;
    [DataMember]
    public string port;
  }

}

使う側(sRetはHTTPで受け取ったJSONが入っている)

    DataContractJsonSerializer dcjs = new DataContractJsonSerializer(typeof(ResPonseJData));
    using (System.IO.MemoryStream ms = new System.IO.MemoryStream(Encoding.UTF8.GetBytes(sRet)))
    {
      ResPonseJData Jdata = (ResPonseJData)dcjs.ReadObject(ms);
      if (Jdata.result.Equals("0"))
      {
        Console.WriteLine(Jdata.channeAddressId);
        Console.WriteLine(Jdata.result);
        Console.WriteLine(Jdata.ip);
        Console.WriteLine(Jdata.port);
      }
    }