C# 使用Newtonsoft.Json反序列化C“对象时出错:转换值时出错”;xxx“;输入';System.String[]和#x27;
我刚刚使用Newtonsoft.Json,在将Json对象绑定到C#对象时遇到了一个问题 以下是我的对象定义:C# 使用Newtonsoft.Json反序列化C“对象时出错:转换值时出错”;xxx“;输入';System.String[]和#x27;,c#,json,json.net,C#,Json,Json.net,我刚刚使用Newtonsoft.Json,在将Json对象绑定到C#对象时遇到了一个问题 以下是我的对象定义: namespace pg.Factories { using System; using System.Globalization; using Newtonsoft.Json; using Newtonsoft.Json.Converters; public partial class Survey { [JsonPr
namespace pg.Factories
{
using System;
using System.Globalization;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
public partial class Survey
{
[JsonProperty("id")]
public string Id { get; set; }
[JsonProperty("title")]
public string Title { get; set; }
[JsonProperty("created_at")]
public DateTimeOffset CreatedAt { get; set; }
[JsonProperty("updated_at")]
public DateTimeOffset UpdatedAt { get; set; }
[JsonProperty("collectors")]
public string[][] Collectors { get; set; }
[JsonProperty("pages")]
public string[][] Pages { get; set; }
[JsonProperty("options")]
public Options Options { get; set; }
[JsonProperty("links")]
public Links Links { get; set; }
[JsonProperty("meta")]
public Meta Meta { get; set; }
}
public partial class Options
{
[JsonProperty("display_progress_bar")]
public bool DisplayProgressBar { get; set; }
[JsonProperty("display_title")]
public bool DisplayTitle { get; set; }
[JsonProperty("footer_text")]
public string FooterText { get; set; }
[JsonProperty("language")]
public string Language { get; set; }
[JsonProperty("display_logo")]
public bool DisplayLogo { get; set; }
[JsonProperty("display_pages_numbering")]
public bool DisplayPagesNumbering { get; set; }
[JsonProperty("display_questions_numbering")]
public bool DisplayQuestionsNumbering { get; set; }
[JsonProperty("correction_type")]
public string CorrectionType { get; set; }
[JsonProperty("timer")]
public Timer Timer { get; set; }
}
public partial class Timer
{
[JsonProperty("hours")]
public long Hours { get; set; }
[JsonProperty("minutes")]
public long Minutes { get; set; }
[JsonProperty("seconds")]
public long Seconds { get; set; }
}
public partial class Links
{
[JsonProperty("first")]
public string First { get; set; }
[JsonProperty("last")]
public string Last { get; set; }
[JsonProperty("prev")]
public string Prev { get; set; }
[JsonProperty("next")]
public string Next { get; set; }
}
public partial class Meta
{
[JsonProperty("current_page")]
public long CurrentPage { get; set; }
[JsonProperty("from")]
public long From { get; set; }
[JsonProperty("last_page")]
public long LastPage { get; set; }
[JsonProperty("path")]
public string Path { get; set; }
[JsonProperty("per_page")]
public long PerPage { get; set; }
[JsonProperty("to")]
public long To { get; set; }
[JsonProperty("total")]
public long Total { get; set; }
}
public partial class Survey
{
public static Survey FromJson(string json) => JsonConvert.DeserializeObject<Survey>(json, pg.Factories.Converter.Settings);
}
public static class Serialize
{
public static string ToJson(this Survey self) => JsonConvert.SerializeObject(self, pg.Factories.Converter.Settings);
}
internal static class Converter
{
public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
{
MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
DateParseHandling = DateParseHandling.None,
Converters = {
new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
},
};
}
}
获取JSON字符串没有问题,但在创建C#对象时,我面临以下问题:
Unhandled exception. Newtonsoft.Json.JsonSerializationException: Error converting value "5dd7c09624810c6cfe20d3f9" to type 'System.String[]'. Path 'data[0].collectors[0]'
你有什么想法吗
非常感谢 在JSON字符串中,属性“收集器”是字符串的一维数组:
"collectors":["5dd7c09624810c6cfe20d3f9"]
但在对象定义中,您已使用[]将其声明为二维:
public string[][] Collectors { get; set; }
该错误表示无法将单个字符串(“5dd7c09624810c6cfe20d3f9”
)转换为所需的字符串数组。您的JSON应该看起来像
"collectors":[["5dd7c09624810c6cfe20d3f9"], ["5ee...", "5ff..."]]
(或至少
"collectors":[["5dd7c09624810c6cfe20d3f9"]]
),否则属性定义应为
public string[] Collectors { get; set; }
顺便说一句,看起来你的“页面”属性也会有同样的问题
"collectors":[["5dd7c09624810c6cfe20d3f9"], ["5ee...", "5ff..."]]
"collectors":[["5dd7c09624810c6cfe20d3f9"]]
public string[] Collectors { get; set; }