在我的测试vb.net MVC网络应用程序中,我有这个json ....
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类? ..我希望像Person p =(Person)j.value;
这样的东西谢谢! 魔
答案 0 :(得分:5)
首先,我会使用int作为Age。但假设JSON结构如:
{
"Name" : "John Doe",
"Age" : 100,
}
如果你想在System.Json中使用烘焙:
var person = new Person()
var obj = JsonObject.Parse(json);
person.Name = obj["Name"].ToString();
person.Age = (int)obj["Age"];
我 HIGHLY 建议使用ServiceStack.Text,它是一个高度优化的极快库,可以使用兼容MonoTouch和Mono for Android的JSON ...开箱即用!< / p>
您可以使用ServiceStack here查看使用JSON的API。
答案 1 :(得分: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平台上工作完美,单声道和单触点。