2011-12-09 4 views
2

をMontouchする MonoTouchで:MVCから逆シリアル化JSON、私はこのJSONを持って....私のテストvb.net MVCのWebアプリで

Public Class Person 
    Public Property Name As String 
    Public Property Age As Byte 
    Public Sub New(name As String, age As Byte) 
     Me.Name = name 
     Me.Age = age 
    End Sub 
End Class 

Function GetPerson() As JsonResult 
    Dim p As New Person("John Doe", 50) 
    Return Json(p, JsonRequestBehavior.AllowGet) 
End Function 

そして、私はこれを持ってMonoTouchで中

...

JsonObject j; 
Uri address = new Uri("http://mysite/home/GetPerson"); 
HttpWebRequest httpReq = (HttpWebRequest)HttpWebRequest.Create (address); 
using (HttpWebResponse httpRes = (HttpWebResponse)httpReq.GetResponse()) { 
    Stream s = httpRes.GetResponseStream(); 
    j = (JsonObject)JsonObject.Load (s); 
} 

そして、このクラス...

Public Class Person { 
    Public string Name { get; set; } 
    Public byte Age { get; set; } 
} 

にはどうすれば人のクラスにJsonObject jを解析していますか?私はPerson p =(Person)j.valueのようなものを望んでいました。

ありがとうございます! Mojo

答えて

5

まず、私は年齢のためにintを使用します。しかし、のようなJSON構造を仮定して:あなたはSystem.Jsonもので焼い使用したい場合は

{ 
    "Name" : "John Doe", 
    "Age" : 100, 
} 

var person = new Person() 
var obj = JsonObject.Parse(json); 

person.Name = obj["Name"].ToString(); 
person.Age = (int)obj["Age"]; 

は私がHIGHLYしかしServiceStack.Textを使用することをお勧めしますが、それは高度に最適化された非常に高速のですAndroid用MonoTouchとMonoの両方と互換性のあるJSONを消費するためのライブラリ...

JSONを消費するためのAPIは、ServiceStack hereでチェックアウトできます。

+0

ありがとうございます!完璧に働いた。そうですね。今日はServiceStackを見て、いくつかのVBサンプルを見つけようとしましたが、できませんでした。だから私はそれを設定しようとしましたが、失敗しました。再度、感謝します! – MojoDK

+1

MonoTouchでRestSharpを使用しています。 ServiceStackによく似ています。 RestSharpも素晴らしい作品です。 –

+1

[RestSharp](https://github.com/restsharp/RestSharp)まで!単純化/直列化以上のことを行います。これは、Webクライアントをきれいに保つのに役立ち、繰り返えされたたくさんの厄介なものを取り除き、.NETのHttpWebクラスの多くの落とし穴に対処します。 –

3

この質問が古くなったとしても、ここで私が使用する解決策があります。 MonoTouchを使用すると、DataContractに基づく.net Jsonシリアル化メカニズムを使用できます。

[DataContract] 
Public Class Person { 
    [DataMember] 
    Public string Name { get; set; } 
    [DataMember] 
    Public byte Age { get; set; } 
} 

とDataContractJsonSerializerを使用する(System.Runtime.Serialization.Jsonに見出さ)

Stream stream = httpRes.GetResponseStream(); 
DataContractJsonSerializer jsSerializer = new DataContractJsonSerializer(typeof(Person)); 
Person person = (Person)jsSerializer.ReadObject(stream); 

このように、コードは、WCF準拠しms.netプラットフォーム、モノおよびMonoTouchで上の完璧な作業です。

関連する問題