異邦人になってみた~~上海生活写真ブログ

中国上海市在住です。もう10年を超えました。休日は星空(天の川)撮影やポートレート撮影等、連休時はカメラを持って中国各地を旅行してます。最近は内モンゴル自治区によく行っています。

 このブログについて(about)
  中国旅行/観光/写真記事一覧(省別)

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

ドットネットフレームワークは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);
      }
    }