C# json反序列化itunes搜索api

发布于 2024-10-14 07:14:01 字数 2100 浏览 6 评论 0原文

我只是无法让这种反序列化工作发挥作用。它没有给出错误,但 ArtistName 仍为空。

有人可以帮忙吗?

Json 字符串:

{ “结果计数”:1, “结果”: [ {“wrapperType”:“track”,“kind”:“song”,“artistId”:414401,“collectionId”:6666512,“trackId”:6666508,“artistName”:“自动驾驶关闭”,“collectionName”:“Make a Sound", "trackName":"Byron Black", "collectionCensoredName":"发出声音", [...]"

HttpWebRequest webRequest;

    void StartWebRequest(string itunesUrl)
    {
        webRequest = (HttpWebRequest)WebRequest.Create(itunesUrl); 
        webRequest.Method = "GET";
        webRequest.BeginGetResponse(new AsyncCallback(FinishWebRequest), null);

    }

    void FinishWebRequest(IAsyncResult result)
    {

        StreamReader sr = new StreamReader(webRequest.EndGetResponse(result).GetResponseStream());
        string json = sr.ReadToEnd();

        Log.debugToVS("json: " + json);


        iTunesResult itunesObj = new iTunesResult();

        itunesObj = JSONHelper.Deserialise<iTunesResult>(json);

        Log.debugToVS("artistId: " + itunesObj.artistName);

    }

    public void iTunesSearch(string artist, string album, string title)
    {

        if(artist == "" && album == "" && title == "") return;

        string query = "http://ax.itunes.apple.com/WebObjects/MZStoreServices.woa/wa/wsSearch?";

        query += "term=" + HttpUtility.UrlEncode(artist + " " + album + " " + title);

        query += "&media=music";
        query += "&limit=20";

        Log.debugToVS("url: " + query);

        StartWebRequest(query); 
    }

}

public class JSONHelper
{
    public static T Deserialise<T>(string json)
    {
        T obj = Activator.CreateInstance<T>();

        MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(json));

            DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
            obj = (T)serializer.ReadObject(ms); // <== Your missing line



            return obj;

    }
}

[DataContract]
public class iTunesResult
{
    [DataMember]
    public string artistName { get; set; }
}

I just cant get this deserilization to work. It gives no error but artistName remains empty.

Can anyone help?

Json string:

{
"resultCount":1,
"results": [
{"wrapperType":"track", "kind":"song", "artistId":414401, "collectionId":6666512, "trackId":6666508, "artistName":"Autopilot Off", "collectionName":"Make a Sound", "trackName":"Byron Black", "collectionCensoredName":"Make a Sound", [...]"

HttpWebRequest webRequest;

    void StartWebRequest(string itunesUrl)
    {
        webRequest = (HttpWebRequest)WebRequest.Create(itunesUrl); 
        webRequest.Method = "GET";
        webRequest.BeginGetResponse(new AsyncCallback(FinishWebRequest), null);

    }

    void FinishWebRequest(IAsyncResult result)
    {

        StreamReader sr = new StreamReader(webRequest.EndGetResponse(result).GetResponseStream());
        string json = sr.ReadToEnd();

        Log.debugToVS("json: " + json);


        iTunesResult itunesObj = new iTunesResult();

        itunesObj = JSONHelper.Deserialise<iTunesResult>(json);

        Log.debugToVS("artistId: " + itunesObj.artistName);

    }

    public void iTunesSearch(string artist, string album, string title)
    {

        if(artist == "" && album == "" && title == "") return;

        string query = "http://ax.itunes.apple.com/WebObjects/MZStoreServices.woa/wa/wsSearch?";

        query += "term=" + HttpUtility.UrlEncode(artist + " " + album + " " + title);

        query += "&media=music";
        query += "&limit=20";

        Log.debugToVS("url: " + query);

        StartWebRequest(query); 
    }

}

public class JSONHelper
{
    public static T Deserialise<T>(string json)
    {
        T obj = Activator.CreateInstance<T>();

        MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(json));

            DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
            obj = (T)serializer.ReadObject(ms); // <== Your missing line



            return obj;

    }
}

[DataContract]
public class iTunesResult
{
    [DataMember]
    public string artistName { get; set; }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

漆黑的白昼 2024-10-21 07:14:01

我认为您的数据合同有问题。查看 Json 数据契约应该是这样的。

[DataContract]
public class iTunesResult
{
    [DataMember]
    public iTuneJsonResults[] results { get; set; }
}


[DataContract]
public class iTuneJsonResults
{
    [DataMember]
    public string artistName { get; set; }
}

FinishWebrequest 中的 Log.xxxx 行应变为:

foreach(var item in itunesObj.results)
     Log.debugToVS("artistId: " + item.artistName);

i think there is a problem with your data contract. Looking at the Json the Data Contract should be something like this.

[DataContract]
public class iTunesResult
{
    [DataMember]
    public iTuneJsonResults[] results { get; set; }
}


[DataContract]
public class iTuneJsonResults
{
    [DataMember]
    public string artistName { get; set; }
}

and that line for Log.xxxx in FinishWebrequest should become:

foreach(var item in itunesObj.results)
     Log.debugToVS("artistId: " + item.artistName);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文