Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在c中使用索引数组反序列化JSON#_C#_Asp.net Mvc_Json_Deserialization - Fatal编程技术网

C# 在c中使用索引数组反序列化JSON#

C# 在c中使用索引数组反序列化JSON#,c#,asp.net-mvc,json,deserialization,C#,Asp.net Mvc,Json,Deserialization,我对使用JSON非常陌生,正在处理来自API的返回,我无法更改其格式。返回示例为:(实际URL已被删除) 我在VS2010中将Newtonsoft.Json库与MVC3一起使用 我的班级是: [JsonObject(MemberSerialization.OptIn)] public class LinksJSON { [JsonProperty] public string link{ get; set; } [JsonProp

我对使用JSON非常陌生,正在处理来自API的返回,我无法更改其格式。返回示例为:(实际URL已被删除)

我在VS2010中将Newtonsoft.Json库与MVC3一起使用

我的班级是:

[JsonObject(MemberSerialization.OptIn)]
    public class LinksJSON
    {
        [JsonProperty]
        public string link{ get; set; }

        [JsonProperty]
        public string message { get; set; }

        [JsonProperty]
        public string error { get; set; }

        [JsonProperty]
        public bool status { get; set; }
    }
我正在反序列化它:

private static T _download_serialized_json_data<T>(string url) where T : new()
    {
        using (var w = new WebClient())
        {
            var json_data = string.Empty;
            // attempt to download JSON data as a string
            try
            {
                json_data = w.DownloadString(url);
            }
            catch (Exception) { }
            // if string with JSON data is not empty, deserialize it to class and return its instance 
            return !string.IsNullOrEmpty(json_data) ? JsonConvert.DeserializeObject<T>(json_data) : new T();
        }
    }

    public string CheckJSONLink()
    {

        var url = "<api url-removed for security>";

        var outObj = _download_serialized_json_data<LinksJSON>(url);



        return outObj.Link;
    }
private static T\u download\u序列化的json\u数据(字符串url),其中T:new()
{
使用(var w=new WebClient())
{
var json_data=string.Empty;
//尝试以字符串形式下载JSON数据
尝试
{
json_data=w.DownloadString(url);
}
捕获(异常){}
//若包含JSON数据的字符串不是空的,则将其反序列化到类并返回其实例
return!string.IsNullOrEmpty(json_数据)?JsonConvert.DeserializeObject(json_数据):new T();
}
}
公共字符串检查jsonlink()
{
var url=“”;
var outObj=\u下载\u序列化的\u json\u数据(url);
返回outObj.Link;
}
但是,我试图获取
linkurl
的值,它是
Link
中的索引数组


如何访问此信息?

您没有将类设置为与JSON匹配,您的类说
link
是一个简单字符串,您的示例将其显示为复杂类型


为了按照预期正确地反序列化它,必须修改类以匹配JSON。具体来说,
链接
应该是类的实例。

您应该使用以下类:

[JsonObject(MemberSerialization.OptIn)]
public class LinksJSON
{
    [JsonProperty]
    public body body { get; set; }

    [JsonProperty]
    public string message { get; set; }

    [JsonProperty]
    public string error { get; set; }

    [JsonProperty]
    public bool status { get; set; }
}

[JsonObject(MemberSerialization.OptIn)]
public class body
{
    [JsonProperty]
    public link link { get; set; }
}

[JsonObject(MemberSerialization.OptIn)]
public class link
{
    [JsonProperty]
    public string[] linkurl { get; set; }
}

顺便说一句,我可以访问所有其他字段(错误、消息和状态,没有问题)。这就是我最后所做的:类似于上面的[JsonObject(MemberSerialization.OptIn)]公共类链接JSON{[JsonProperty]公共体链接详细信息体;[JsonProperty]public bool status;[JsonProperty]公共字符串消息;[JsonProperty]公共字符串错误;}公共类bodylinkdetails{public link;}公共类link{public string[]linkurl;}同样感谢您的回答,因为这促使他们与团队进行讨论,以获得正确的类结构进行反序列化。
[JsonObject(MemberSerialization.OptIn)]
public class LinksJSON
{
    [JsonProperty]
    public body body { get; set; }

    [JsonProperty]
    public string message { get; set; }

    [JsonProperty]
    public string error { get; set; }

    [JsonProperty]
    public bool status { get; set; }
}

[JsonObject(MemberSerialization.OptIn)]
public class body
{
    [JsonProperty]
    public link link { get; set; }
}

[JsonObject(MemberSerialization.OptIn)]
public class link
{
    [JsonProperty]
    public string[] linkurl { get; set; }
}