Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.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#_Json_Json Deserialization - Fatal编程技术网

C# 在C中反序列化JSON

C# 在C中反序列化JSON,c#,json,json-deserialization,C#,Json,Json Deserialization,我将JSON对象存储在变量中。JSON看起来像 { "data": [ {"SNumber":"05", "LName":"TyJ", "LNameMarkup":"18/TyJ" }]} 我为类似JSON的代码创建了模型类 namespace SetName.Models { public class SNameDTO { public class Datum { public string SNumber { get; set; } public string

我将JSON对象存储在变量中。JSON看起来像

{
 "data":
[
{"SNumber":"05",
 "LName":"TyJ",
 "LNameMarkup":"18/TyJ"
}]}
我为类似JSON的代码创建了模型类

namespace SetName.Models
{
public class SNameDTO
{     
 public class Datum
 {
  public string SNumber { get; set; }
  public string LName { get; set; }
  public string LNameMarkup { get; set; }
 }

 public class RootObject
 {
  public List<Datum> data { get; set; }
 }
 }
 }
我将上面的代码替换为

  SNameDTO.RootObject retSName = GetSName(StockNumber);
它抛出错误,就像

无法将类型“string”隐式转换为“SetName.Models.SNameDTO.RootObject”


我试图使用模型类而不是动态对象。

要真正反序列化JSON字符串,您需要做更多的工作。如果您使用NuGet上提供的Json.Net,您可以尝试以下方法:

var myClass = JsonConvert.DeserializeObject<RootObject>(GetSName(StockNumber));

使用了Newtonsoft JSON nuget包,可以如下反序列化,希望对您有所帮助

class Program
{
    static void Main(string[] args)
    {
        var json = "{\"SNumber\":\"05\",\"LName\":\"TyJ\",\"LNameMarkup\":\"18/TyJ\"}";

        var jsonCollection =
            "[{\"SNumber\":\"05\",\"LName\":\"TyJ\",\"LNameMarkup\":\"18/TyJ\"},\r\n{\"SNumber\":\"10\",\"LName\":\"TyJ2\",\"LNameMarkup\":\"20/TyJ\"}]";

        var jsonRootObject = "{ \"data\" : [{\"SNumber\":\"05\",\"LName\":\"TyJ\",\"LNameMarkup\":\"18/TyJ\"}, {\"SNumber\":\"10\",\"LName\":\"TyJ2\",\"LNameMarkup\":\"20/TyJ\"}]}";

        var data = JsonConvert.DeserializeObject<SNameDTO.Datum>(json);
        var dataCollection = JsonConvert.DeserializeObject<List<SNameDTO.Datum>>(jsonCollection);
        var rootObject = JsonConvert.DeserializeObject<SNameDTO.RootObject>(jsonRootObject);
    }
}


public class SNameDTO
{
    public class Datum
    {
        public string SNumber { get; set; }
        public string LName { get; set; }
        public string LNameMarkup { get; set; }
    }

    public class RootObject
    {
        public List<Datum> data { get; set; }
    }
}

GetSName中的代码是什么?可能是@RenatoAfonso的重复,该方法返回我上面发布的JSON。@使用动态对象的NewFurnity。我在看我是否可以使用模型类。如果我可以使用Model类,我该如何处理呢?你没有反序列化任何东西,只是试图将字符串转储到模型中。你的JSON是一个字符串,这是行不通的RootObject@xyz这是你自己定义的属性。。。如果您想要列表中第一个数据对象的Lname,那么myClass.data.First.Lname如何?这与json或反序列化关系不大。我建议您首先检查debug是否可以进行反序列化。如果您不想安装其他软件包,.NET JavaScriptSerializer在JSON对象上运行良好。反序列化方法将JSON转换为任何类型的对象。只需添加对System.Web.Extensions程序集的引用。
class Program
{
    static void Main(string[] args)
    {
        var json = "{\"SNumber\":\"05\",\"LName\":\"TyJ\",\"LNameMarkup\":\"18/TyJ\"}";

        var jsonCollection =
            "[{\"SNumber\":\"05\",\"LName\":\"TyJ\",\"LNameMarkup\":\"18/TyJ\"},\r\n{\"SNumber\":\"10\",\"LName\":\"TyJ2\",\"LNameMarkup\":\"20/TyJ\"}]";

        var jsonRootObject = "{ \"data\" : [{\"SNumber\":\"05\",\"LName\":\"TyJ\",\"LNameMarkup\":\"18/TyJ\"}, {\"SNumber\":\"10\",\"LName\":\"TyJ2\",\"LNameMarkup\":\"20/TyJ\"}]}";

        var data = JsonConvert.DeserializeObject<SNameDTO.Datum>(json);
        var dataCollection = JsonConvert.DeserializeObject<List<SNameDTO.Datum>>(jsonCollection);
        var rootObject = JsonConvert.DeserializeObject<SNameDTO.RootObject>(jsonRootObject);
    }
}


public class SNameDTO
{
    public class Datum
    {
        public string SNumber { get; set; }
        public string LName { get; set; }
        public string LNameMarkup { get; set; }
    }

    public class RootObject
    {
        public List<Datum> data { get; set; }
    }
}