C# 反序列化json对象时,输入不是有效的Base-64

C# 反序列化json对象时,输入不是有效的Base-64,c#,json,base64,json.net,json-deserialization,C#,Json,Base64,Json.net,Json Deserialization,我从http://itunes.apple.com/lookup?id=796171602 这个链接总是给我一个只有一个项目的数组。因此,我不想用根对象和结果数组创建一个类,而是想得到第一个对象,并直接使用它 WebClient webClient = new WebClient(); webClient.Encoding = Encoding.UTF8; string appJsonData = webClient.DownloadString(

我从
http://itunes.apple.com/lookup?id=796171602

这个链接总是给我一个只有一个项目的数组。因此,我不想用根对象和结果数组创建一个类,而是想得到第一个对象,并直接使用它

        WebClient webClient = new WebClient();
        webClient.Encoding = Encoding.UTF8;
        string appJsonData = webClient.DownloadString("http://itunes.apple.com/lookup?id=796171602");

        App app = new App();
        JToken rootObject = JToken.Parse(appJsonData);
        JToken appToken = rootObject["results"];

        app = JsonConvert.DeserializeObject<App>(appJsonData);
当我使用jsonpack.com创建一个c#类时,它可以正常工作

我的自定义对象是:

public class App : Entity
{
    //it's not app id in the data base
    [JsonProperty("trackId")]
    public virtual int AppStoreId { get; set; }

    [JsonProperty("trackViewUrl")]
    public virtual string AppStoreLink { get; set; }

    [JsonProperty("sellerName")]
    public virtual string SellerName { get; set; }

    [JsonProperty("artworkUrl60")]
    public virtual string Icon { get; set; }

    [JsonProperty("trackName")]
    public virtual string Name { get; set; }

    [JsonProperty("formattedPrice")]
    public virtual string FormattedPrice { get; set; }

    [JsonProperty("primaryGenreName")]
    public virtual string Genre { get; set; }

    [JsonProperty("Description")]
    public virtual string Description { get; set; }

    [JsonProperty("releaseNotes")]
    public virtual string ReleaseNotes { get; set; }

    [JsonProperty("releaseDate")]
    public virtual DateTime ReleaseDate { get; set; }

    [JsonProperty("userRatingCountForCurrentVersion")]
    public virtual string UserRatingCountForCurrentVersion { get; set; }

    [JsonProperty("averageUserRatingForCurrentVersion")]
    public virtual string AverageUserRatingForCurrentVersion { get; set; }

    [JsonProperty("fileSizeBytes")]
    public virtual string FileSize { get; set; }

    [JsonProperty("screenshotUrls")]
    public virtual IList<string> IPhoneSceenShots { get; set; }

    [JsonProperty("ipadscreenshotUrls")]
    public virtual IList<string> IPadSceenShots { get; set; }

    public App()
    {
        IPhoneSceenShots = new List<string>();
        IPadSceenShots = new List<string>();
    }
}
公共类应用程序:实体
{
//它不是数据库中的应用程序id
[JsonProperty(“trackId”)]
公共虚拟int AppStoreId{get;set;}
[JsonProperty(“trackViewUrl”)]
公共虚拟字符串AppStoreLink{get;set;}
[JsonProperty(“卖方名称”)]
公共虚拟字符串SellerName{get;set;}
[JsonProperty(“artworkUrl60”)]
公共虚拟字符串图标{get;set;}
[JsonProperty(“trackName”)]
公共虚拟字符串名称{get;set;}
[JsonProperty(“格式价格”)]
公共虚拟字符串FormattedPrice{get;set;}
[JsonProperty(“primaryGenreName”)]
公共虚拟字符串类型{get;set;}
[JsonProperty(“描述”)]
公共虚拟字符串描述{get;set;}
[JsonProperty(“发行说明”)]
公共虚拟字符串ReleaseNotes{get;set;}
[JsonProperty(“发布日期”)]
公共虚拟日期时间ReleaseDate{get;set;}
[JsonProperty(“userRatingCountForCurrentVersion”)]
公共虚拟字符串UserRatingCountForCurrentVersion{get;set;}
[JsonProperty(“averageUserRatingForCurrentVersion”)]
公共虚拟字符串AverageUserRatingForCurrentVersion{get;set;}
[JsonProperty(“文件大小字节”)]
公共虚拟字符串文件大小{get;set;}
[JsonProperty(“屏幕快照URL”)]
公共虚拟IList IPhoneSceenShots{get;set;}
[JsonProperty(“ipadscreenshotUrls”)]
公共虚拟IList IPadSceenShots{get;set;}
公共应用程序()
{
IPhoneSceenShots=新列表();
IPadSceenShots=新列表();
}
}
昨晚效果不错,但今天不行。
有人知道吗?

这段代码适用于json字符串

var obj = JsonConvert.DeserializeObject<RootObject>(appJsonData);
var obj=JsonConvert.DeserializeObject(appJsonData);

公共类结果
{
公共字符串种类{get;set;}
公共列表功能{get;set;}
公共列表支持的设备{get;set;}
public bool isGameCenterEnabled{get;set;}
公共列表截图URL{get;set;}
公共列表ipadScreenshotUrls{get;set;}
公共字符串artworkUrl60{get;set;}
公共字符串artworkUrl512{get;set;}
公共字符串artistViewUrl{get;set;}
公共int artistId{get;set;}
公共字符串artistName{get;set;}
公共双价{get;set;}
公共字符串版本{get;set;}
公共字符串说明{get;set;}
公共字符串货币{get;set;}
公共列表类型{get;set;}
公共列表genreIds{get;set;}
公共字符串releaseDate{get;set;}
公共字符串sellerName{get;set;}
公共字符串bundleId{get;set;}
public int trackId{get;set;}
公共字符串trackName{get;set;}
公共字符串primaryGenreName{get;set;}
public int primaryGenreId{get;set;}
公共字符串releaseNotes{get;set;}
公共字符串格式化价格{get;set;}
公共字符串包装器类型{get;set;}
公共字符串trackCensoredName{get;set;}
公共列表语言代码SO2A{get;set;}
公共字符串fileSizeBytes{get;set;}
公共字符串contentAdvisoryRating{get;set;}
当前版本{get;set;}的公共双平均用户比率
当前版本{get;set;}的公共int UserRatingCounts
公共字符串artworkUrl100{get;set;}
公共字符串trackViewUrl{get;set;}
公共字符串trackContentRating{get;set;}
}
公共类根对象
{
public int resultCount{get;set;}
公共列表结果{get;set;}
}
编辑

var obj =  JsonConvert.DeserializeObject<JObject>(appJsonData)["results"][0] as JObject;
var app = obj.ToObject <Result>();
var obj=JsonConvert.DeserializeObject(appJsonData)[“results”][0]作为JObject;
var app=obj.ToObject();

我只想要一个名为app的实体。没有结果列表。查看我的更新代码。因为它总是有一个result@HashemAboonajmi但他的意思是动态地反序列化json,获取所需的部分,并创建最终的对象(
App
)。你为什么要这样做?只需使用
var app=obj.results[0]
@HashemAboonajmi看到编辑,你认为这是一个更好的解决方案吗?谢谢你的回答。但我很惊讶为什么我的解决方案不起作用?
public class Result
{
    public string kind { get; set; }
    public List<object> features { get; set; }
    public List<string> supportedDevices { get; set; }
    public bool isGameCenterEnabled { get; set; }
    public List<string> screenshotUrls { get; set; }
    public List<object> ipadScreenshotUrls { get; set; }
    public string artworkUrl60 { get; set; }
    public string artworkUrl512 { get; set; }
    public string artistViewUrl { get; set; }
    public int artistId { get; set; }
    public string artistName { get; set; }
    public double price { get; set; }
    public string version { get; set; }
    public string description { get; set; }
    public string currency { get; set; }
    public List<string> genres { get; set; }
    public List<string> genreIds { get; set; }
    public string releaseDate { get; set; }
    public string sellerName { get; set; }
    public string bundleId { get; set; }
    public int trackId { get; set; }
    public string trackName { get; set; }
    public string primaryGenreName { get; set; }
    public int primaryGenreId { get; set; }
    public string releaseNotes { get; set; }
    public string formattedPrice { get; set; }
    public string wrapperType { get; set; }
    public string trackCensoredName { get; set; }
    public List<string> languageCodesISO2A { get; set; }
    public string fileSizeBytes { get; set; }
    public string contentAdvisoryRating { get; set; }
    public double averageUserRatingForCurrentVersion { get; set; }
    public int userRatingCountForCurrentVersion { get; set; }
    public string artworkUrl100 { get; set; }
    public string trackViewUrl { get; set; }
    public string trackContentRating { get; set; }
}

public class RootObject
{
    public int resultCount { get; set; }
    public List<Result> results { get; set; }
}
var obj =  JsonConvert.DeserializeObject<JObject>(appJsonData)["results"][0] as JObject;
var app = obj.ToObject <Result>();