0

我有一个网络服务,可根据请求输出 JSON 字符串。

目前,我设置了一个接收类,看起来像这样

[DataContract]
public class user_new_register
{
    [DataMember(Name="ErrorStatus")]
    public string ErrorStatus{ get; set; }
    [DataMember(Name="ErrorMessages")]
    public string []ErrorMessages { get; set; }
    [DataMember(Name="UserID")]
    public int UserID { get; set; }
}

我像这样将字符串传递给服务器

var httpReq = (HttpWebRequest)HttpWebRequest.Create (new Uri (createUser));
httpReq.BeginGetResponse ((ar) => {
var request = (HttpWebRequest)ar.AsyncState;
using (var response = (HttpWebResponse)request.EndGetResponse (ar)) {
   var s = response.GetResponseStream ();

这有效,“s”包含来自服务器的响应。我现在的问题是如何反序列化对 [DataContract] 类的回复。

我尝试了以下方法,但它不起作用

user_new_register register = new user_new_register ();
var stream = new MemoryStream ();
var serializer = new DataContractJsonSerializer (typeof(json.user_new_register));
var httpReq = (HttpWebRequest)HttpWebRequest.Create (new Uri (createUser));
httpReq.BeginGetResponse ((ar) => {
    var request = (HttpWebRequest)ar.AsyncState;
using (var response = (HttpWebResponse)request.EndGetResponse (ar)) {
    var s = response.GetResponseStream ();
        stream = (JsonObject)JsonObject.Load (s);
        register = (user_new_register)serializer.ReadObject (s);

这编译但在 register = 行崩溃

任何帮助或建议将不胜感激:)

谢谢

保罗

4

2 回答 2

0

我建议使用 json.net。Mono有一个大约一年前的分支版本(4.0 版),但我已经在多个项目中使用它并且它很可靠。

于 2012-12-11T00:49:12.703 回答
0

我在 MonoDroid 项目中使用ServiceStack.Text 。它有.Net 最快的序列化器。

我还喜欢将反序列化作为工厂方法放在我的 DTO/模型中,如下所示:

using ServiceStack.Text;

public class user_new_register
{
    public string ErrorStatus { get; set; }
    public string[] ErrorMessages { get; set; }
    public int UserID { get; set; }

    public static user_new_register FromJson(string json)
    {
        return JsonSerializer.DeserializeFromString<user_new_register>(json);
    }
}
于 2012-12-11T06:35:44.577 回答