序列化json到对象c#

时间:2013-12-10 10:49:29

标签: c# json

我是json的新手,我正在尝试将json响应转换为对象

json是

"[{\"fields\":[[\"name\",\"value\",\"values\",\"error\"],[\"username\",\"test\",null,\"\"],[\"password\",\"test\",null,\"\"],[\"accountid\",\"\",null,\"\"],[\"rememberMe\",\"Y\",null,\"\"],[\"language\",\"en-US\",null,\"\"],[\"S\",\"test\",null,null]],\"success\":\"Y\",\"message\":\"User authenticated. Logging in.\"}]"

我写了两个班级

  public class fields
    {
      public string name { get; set; }
      public string value { get; set; }
      public string values { get; set; }
      public string error { get; set; }
    }

    public class Demo
    {
        public List<fields> fields { get; set; }
        public string message { get; set; }
        public string success { get; set; }

    }

我制作了这个序列化代码:

JsonSerializer serializer = new JsonSerializer();
    Demo result = JsonConvert.DeserializeObject<Demo>(responseFromServer);

or this

  Demo result = new JavaScriptSerializer().Deserialize<Demo>(responseFromServer);

错误是

Type '_Default+fields' is not supported for deserialization of an array

由于

Baaroz

4 个答案:

答案 0 :(得分:2)

我尝试了你的代码,这对我来说有点不确定。但我可以告诉你我发现了什么,你可以尝试从这里工作:

首先:正如我对你的问题发表评论,你的字符串的第一个和最后一个字符是[和]。这意味着您的服务器正在向您发送一个数组。为了解决这个问题,我刚刚将你的反序列化行更改为:

Demo[] result = new JavaScriptSerializer().Deserialize<Demo[]>(responseFromServer);

第二:代码仍然无法反序列化到你的fields对象,然后我意识到你正在接收一个字符串数组的数组,然后我将你在Demo类中的属性更改为:

public string[][] fields { get; set; }

希望这可以提供帮助。

答案 1 :(得分:1)

如果格式化json字符串,您会注意到字段中的每个条目都包含另外四个条目,因此List<fields> fields是不够的。

将其替换为List<List<string>> fields

答案 2 :(得分:0)

这是一个问题,Json与你拥有的对象不匹配。 如果您希望JSON与您的C#模型匹配,它将如下所示:

[
    {
        "fields": [
            {
                "name": "Jeff",
                "value": "xcv",
                "values": "xcv",
                "error": "xcv"
            },
            {
                "name": "Jeff",
                "value": "xcv",
                "values": null,
                "error": null
            }
        ],
        "success": "Y",
        "message": "Userauthenticated.Loggingin."
    }
]

尝试使用此网站(还有更多类似的网站)来玩你的C#&amp; JSON直到你得到你想要的东西:http://json2csharp.com/

答案 3 :(得分:0)

我非常确信 Newtonsoft 是在 C# 中使用 JSON 做任何事情的最佳方式,而且没有任何麻烦,它是世界上最受欢迎的 C# NuGet 包,下载量接近 10 亿次,基本上适用于所有 .NET 版本.

我经常使用 JSON 和基于 Web 的 API,从不使用 C# 中的其他任何东西来处理 JSON 转换。

这是最简单的例子之一

string json_string = @"{
                  Firstname: ""Jane"",
                  Lastname: ""Doe"",
                  Age: 36,
                  IsEmployed: true,
                  IsMarried: true,
                  Children: 4
              }";
              
var person = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(json_string);

Console.WriteLine(person.Forename);
Console.WriteLine(person.Lastname);
Console.WriteLine(person.Age);
Console.WriteLine(person.IsEmployed);
Console.WriteLine(person.IsMarried);
Console.WriteLine(person.Children);

无论结构如何,它都能即时生成对象!其他解决方案不适用于所有 .NET 版本。

我在这里写了一篇简单易懂的文章https://turmanauli.medium.com/a-complete-guide-for-serializing-json-to-dynamic-objects-on-the-fly-in-c-7ab4799f648d 关于如何在 Visual Studio 项目中通过 NuGet 包管理器安装和使用 Newtonsoft。