0

私はこのようなWebサーバーに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に割り当てられていることがわかりますが、コンテナはnullのままです。この問題を解決する方法は?助けてください !

4

3 に答える 3

1

次のように、JSONのプロパティ名と一致するJsonPropertyようにプロパティに属性を追加します。attributes

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

また、 JSONプロパティ名と一致させるには、「DOWNLOADLINK」値を持つプロパティにJsonProperty属性を追加する必要があります。Attributes.DOWNLOADLINK

于 2012-10-01T11:10:01.150 に答える
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 に答える
0

一見すると、問題はDOWNLOADLINKプロパティにあると思います。サーバーは「DOWNLOADLINK」を返しますが、プロパティの名前にスペースがありません。

プロパティでjson表現を次のように定義する必要があります。

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

お役に立てれば。

于 2012-10-01T11:15:42.843 に答える