c# - 使用JSON.net解析json字符串

标签 c# ios json xamarin

我正在使用 xamarin 和 c#,这是我使用它们的第一个项目。如果这是一个非常基本的问题,请耐心等待。

我从我的服务器获得了一个 JSON 响应,我试图将这些值存储在一个类中。我不知道如何使用 JSON.Net 在 Csharp 中做到这一点

这是我的代码:

OfferClass.cs

namespace TestApp_IOS_2
{
    public class OfferClass
    {
        public OfferClass ()
        {
        }

        private String title;

        public String getTitle ()
        {
            return title;
        }

        public void setTitle (String title)
        {
            this.title = title;
        }
    }
}

ViewDidLoad 方法:

public override void ViewDidLoad ()
{
    base.ViewDidLoad ();

    // Perform any additional setup after loading the view, typically from a nib.

    String jsonResponse = GetResponse ();

    Console.WriteLine ("Response : " + jsonResponse);
    this.textFieldResponse.Text = jsonResponse; 

    parseResponse (jsonResponse);
}

获取响应方法:

public String GetResponse()
{

    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
    try {
        WebResponse response = request.GetResponse();
        using (Stream responseStream = response.GetResponseStream()) {
            StreamReader reader = new StreamReader(responseStream, Encoding.UTF8);
            return reader.ReadToEnd();
        }
    }
    catch (WebException ex) {
        WebResponse errorResponse = ex.Response;
        using (Stream responseStream = errorResponse.GetResponseStream())
        {
            StreamReader reader = new StreamReader(responseStream, Encoding.GetEncoding("utf-8"));
            String errorText = reader.ReadToEnd();
            Console.WriteLine ("error : "+errorText);
        }
        throw;
    }

}

解析响应方法:

public void parseResponse(String jsonResponse)
{
    OfferClass offer = new OfferClass ();

    //String output = Newtonsoft.Json.JsonConvert.SerializeObject (offer);
    //Console.WriteLine ("Output : " + output);

    offer = Newtonsoft.Json.JsonConvert.DeserializeObject<OfferClass> (jsonResponse);

    Console.WriteLine ("Offer Title : " + offer.getTitle());
}

这是我遇到的异常:

Cannot deserialize the current JSON array (e.g. [1,2,3]) into type 'TestApp_IOS_2.OfferClass' because the type requires a JSON object (e.g. {"name":"value"}) to deserialize correctly.
To fix this error either change the JSON to a JSON object (e.g. {"name":"value"}) or change the deserialized type to an array or a type that implements a collection interface (e.g. ICollection, IList) like List<T> that can be deserialized from a JSON array. JsonArrayAttribute can also be added to the type to force it to deserialize from a JSON array.
Path '', line 3, position 2.

我明白错误的意思,反序列化需要一个 JSON 对象,但是如何做到这一点让我感到困惑。

编辑:::

我的 JSON 例子

{
"id":"138",
"coupon_title":"",
"coupon_image":null,
"owner_id":"181",
"title":"killer campaign",
"desc":"as",
"category_id":"49",
"active":"1",
"campaign_type":"Store Based",
"st_date":"2014-04-09 12:23:14",
"end_date":"2014-03-26 00:00:00",
"template_id":"0",
"campaign_template_title":"",
"template_title":"",
"campaign_template_id":null,
"campaign_offer":"reward",
"logo":"\/assets\/admin\/img\/thumb.jpg",
"status":"published",
"radius":"1.00",
"date_created":"0000-00-00 00:00:00",
"coupon_barcode":"",
"tinyurl":"http:\/\/is.gd\/gYthYp",
"location":"My Store",
"city":"Secunderabad",
"state_id":"3689",
"address_1":"Marredpally, Ranga Reddy, ",
"address_2":"Hyderabad",
"indoor_mall_location":"",
"zip":"500026",
"latitude":"17.4443717",
"longitude":"78.518472100",
"distance":0,
"link":"\/app\/rendersplash\/138\/cm\/23456789",
"reward_link":"\/app\/previewreward\/138\/23456789",
"return_to_offers_link":"\/app\/offers\/500026\/17.4435394\/78.5026527\/5\/json\/23456789"
}

最佳答案

OfferClass需要对 C# 更友好:

public class OfferClass
{
    public string Id { get; set; }
    public string Title { get; set; }
    // And so on... to match the JSON
}

此外,我认为您的 JSON 实际上是一个数组。您列出了一个示例,但我认为它可能会返回一组类似的项目。您将需要反序列化为数组或 List<OfferClass> .

关于c# - 使用JSON.net解析json字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22964386/

相关文章:

c# - 如何在 Javascript 中执行计算

iphone - UItextview在iPhone应用程序中上下移动(当键盘出现和消失时)

php - 当输入通过json变量传递时,mysql中的输出为0

ios - 实现捏/双击缩放 UIImage

c# - POST 方法的参数始终为 null

javascript - 在 Angular 项目中迭代 JSON 响应以创建我可以在应用程序中使用的新 $scope 对象

c# - 如何将 AzureDefaultCredentials 与 Azure Fluent 结合使用?

c# - ListView 滚动控件 - 如果用户不滚动,则滚动到底部?

c# - 如果适用,将嵌套的 ForEach 替换为 Select

ios - 如何下载文件google drive api ios