0

我在这样的网络服务器中有一个 JSON:

{"My Book List": [{"ID":"5","TYPE":"History","TITLE":"Ekannoborti","PRICE":"200","IMAGE":"Ekannoborti.jpg","DOWNLOAD LINK":"http://www.starhostbd.com/"}],"success":3} 

为了反序列化它,我到目前为止已经完成了:

 public class Attributes
    {
        public string ID{ get; set; }
        public string TYPE { get; set; }
        public string TITLE { get; set; }
        public string  PRICE { get; set; }
        public string IMAGE { get; set; }
        public string DOWNLOADLINK { get; set; }
    }

    public class DataJsonAttributeContainer
    {
        public List<Attributes> attributes { get; set; }
        //public Attributes attributes { get; set; }
    }

    public static T DeserializeFromJson<T>(string json)
    {
        T deserializedProduct = JsonConvert.DeserializeObject<T>(json);
        return deserializedProduct;
    }

& 在我的代码中:

void webClient_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
    {
        //var deserializedJSON = JsonConvert.DeserializeObject<Attributes>(e.Result);
        var container = DeserializeFromJson<DataJsonAttributeContainer>(e.Result);
        string asd = container.attributes[0].DOWNLOADLINK[0].ToString();
        //string asd = deserializedJSON.DOWNLOADLINK[0].ToString();
    } 

问题是:从调试窗口中,我可以看到在 e.Result 中分配了数据,但容器仍然为空。如何解决这个问题呢 ?请帮忙 !

4

3 回答 3

1

向属性添加一个JsonProperty属性attributes以匹配 JSON 中的属性名称,如下所示:

public class DataJsonAttributeContainer
{
    [JsonProperty("My Book List")]
    public List<Attributes> attributes { get; set; }
}

此外,您应该使用“下载链接”值JsonProperty向属性添加一个属性,以Attributes.DOWNLOADLINK使其与 JSON 属性名称匹配。

于 2012-10-01T11:10:01.150 回答
0

乍一看,我认为问题出在 DOWNLOADLINK 属性上。您的服务器返回“下载链接”,但您的财产名称中没有空格。

您应该像这样在您的属性中定义 json 表示:

[JsonProperty(PropertyName = "DOWNLOAD LINK")]
public string DOWNLOADLINK { get; set; }

希望这可以帮助。

于 2012-10-01T11:15:42.843 回答
0

实际上,以上两个答案都应该可以解决您的问题,您必须将它们加入俱乐部

public class MyBookList
{
    public string ID { get; set; }
    public string TYPE { get; set; }
    public string TITLE { get; set; }
    public string PRICE { get; set; }
    public string IMAGE { get; set; }

    [JsonProperty("DOWNLOAD LINK")]
    public string DOWNLOADLINK { get; set; }
}

public class DataJsonAttributeContainer
{
    [JsonProperty("My Book List")]
    public List<MyBookList> MyBookList { get; set; }

    public int success { get; set; }
}

并且

var container = DeserializeFromJson<DataJsonAttributeContainer>(e.Result);
string asd = container.attributes[0].DOWNLOADLINK.ToString();

试试这些课程。应该管用。

于 2012-10-01T14:41:28.680 回答