【问题标题】:Converting JSON to C# Array将 JSON 转换为 C# 数组
【发布时间】:2017-07-28 10:18:28
【问题描述】:

我是 C# 新手,遇到了一个小问题。我有一个包含一些邮件地址的 JSON 文件。对于每个邮件地址,此 JSON 文件中有 4 个字段(名称、电子邮件 []、印记、信息 2)。 我想在我的项目中将其转换为数组或数组列表,我目前正在使用 Newtonsoft.Json 来实现这一点。

我做了一个班级地址:

public class adress
{
    public string name = "";
    public string[]  email = {""};
    public string imprint = "";
    public string info2 = "";
}

这是json:

{"name":"test1","email":["test1@test.de"],"imprint":"testimprint1 testimprint1","info2":"testinfo1"} {"name":"test2","email":["test2@test.de"],"imprint":"testimprint2 testimprint2","info2":"testinfo2"} {"name":"test3","email":["test3@test.de"],"imprint":"testimprint3 testimprint3","info2":"testinfo3"}

并尝试像这样转换它:

List<adress> adresses = new List<adress>();
string json_adress = File.ReadAllText("C:\\Mail\\adresses.json");
adresses = JsonConvert.DeserializeObject<List<adress>>(json_adress);

我收到以下错误:

"无法将当前 JSON 对象(例如 {"name":"value"})反序列化为类型 'System.Collections.Generic.List1[Mailer.adress]',因为该类型需要 JSON 数组(例如 [1, 2,3]) 正确反序列化。"`

也许有人可以帮助我更好地理解这个 json 的东西?

【问题讨论】:

  • @Aryan,不,这不应该导致上述问题
  • 请注意:您不应该创建列表对象然后反序列化到此变量中。这将创建一个未使用的对象并导致无意义的分配。
  • 您的 JSON 是否有外括号——[]——以及对象之间的逗号?如果没有外括号,您的文件就不是一个有效的 JSON 值,而是一系列串联的 JSON 值。有关正确格式,请参阅 json.org。如果您的文件确实由串联的 JSON 对象组成,您可以使用来自Load multiple concatenated JSON objects from stream 的解决方案。但请确认这是您所拥有的,因为它不是正确的 JSON。
  • 所以最好这样做: List adresses = JsonConvert.DeserializeObject>(json_adress);??

标签: c# json


【解决方案1】:

你快到了,但有一个小错误。您提供的内容如下。请注意,分隔符处没有逗号。

{JSONSTUFF}
{JSONSTUFF}
{JSONSTUFF} 

但是下面说你希望它被转换为List&lt;address&gt; 但它不是一个列表:(

JsonConvert.DeserializeObject&lt;List&lt;adress&gt;&gt;(json_adress);

所以其实你需要提供的是地址列表,

[
    {JSONSTUFF},
    {JSONSTUFF},
    {JSONSTUFF},
] 

请不要忘记逗号:)

[{"name":"test1","email":["test1@test.de"],"imprint":"testimprint1 testimprint1","info2":"testinfo1"}, {"name":"test2","email":["test2@test.de"],"imprint":"testimprint2 testimprint2","info2":"testinfo2"}, {"name":"test3","email":["test3@test.de"],"imprint":"testimprint3 testimprint3","info2":"testinfo3"}]

【讨论】:

  • 绝对...准确!
  • @hendrikruhen,很高兴为您提供帮助:)
【解决方案2】:

假设文件中每个对象后面都有换行符:

var lines = File.ReadAllLines(@"your path");
List<adress> adresses = new List<adress>();

foreach (var line in lines)
{
    adresses.Add(JsonConvert.DeserializeObject<adress>(line));
}

【讨论】:

    猜你喜欢
    • 2012-03-24
    • 1970-01-01
    • 2015-10-15
    • 1970-01-01
    • 1970-01-01
    • 2016-12-05
    • 1970-01-01
    • 1970-01-01
    • 2014-05-26
    相关资源
    最近更新 更多