c# - 使用 Newtonsoft 反序列化为数据类型时遇到错误
问题描述
问题很简单:我正在尝试制作一个不和谐的机器人,它所需要的只是加载有关机器人在初始化时所在的所有行会的所有信息。
我没有完全尝试任何事情,因为一切看起来都很好。我不想留下这个硬编码并制作一个不友好的库,这就是我仍在尝试这个的原因。
这是我到目前为止所拥有的:[Json File]
{
"Guilds": [
{
"ID": 561524447828246535,
"GuildName": "TestGuild",
"Filter": [ "words", "words2" ]
}
]
}
【提取类】
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using J = Newtonsoft.Json.JsonPropertyAttribute;
using System;
using System.Collections.Generic;
using System.Globalization;
namespace Cuvue.JSONManagment
{
public static class JSONManager<Generic>
{
public static List<Generic> ListFromJson(string directory) => JsonConvert.DeserializeObject<List<Generic>>(directory, Converter.Settings);
public static Generic TypeFromJson(string directory) => JsonConvert.DeserializeObject<Generic>(directory, Converter.Settings);
public static string IntoJson(Generic type) => JsonConvert.SerializeObject(type, 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 }
},
};
}
}
[公会数据类]
using J = Newtonsoft.Json.JsonPropertyAttribute;
namespace Cuvue.JSONManagment
{
public partial class GuildData
{
[J("Guilds")] public Guild[] Guilds { get; set; }
}
public partial class Guild
{
[J("ID")] public long Id { get; set; }
[J("GuildName")] public string GuildName { get; set; }
[J("Filter")] public string[] Filter { get; set; }
}
}
[实例化点]
private async Task Async()
{
Client = new DiscordSocketClient(new DiscordSocketConfig
{
AlwaysDownloadUsers = true,
ConnectionTimeout = 2000,
LogLevel = LogSeverity.Debug
});
Commands = new CommandService(new CommandServiceConfig
{
SeparatorChar = ';',
ThrowOnError = false,
DefaultRunMode = RunMode.Async,
CaseSensitiveCommands = true,
LogLevel = LogSeverity.Debug
});
string Token = JSONManager<BotData>.TypeFromJson(BotDataJSON).Token;
Client.MessageReceived += ClientMessageReceived;
await Commands.AddModulesAsync(assembly: Assembly.GetEntryAssembly(), services: null);
Client.Ready += ClientIsReady;
Client.Log += Logging;
await Client.LoginAsync(TokenType.Bot, Token);
await Client.StartAsync();
#region Populating Lists
//Guilds = JSONManager<GuildData>.ListFromJson(GuildDataJSON);
#endregion
await Task.Delay(-1);
}
[错误信息]
'Unexpected character encountered while parsing value: G. Path '', line 0, position 0.'
嗯……嗯……我希望 JSON 能够反序列化为 GuildData 类并应用于 GuildList 列表。在调试应用程序崩溃。更不用说在尝试为机器人接收令牌时也会发生同样的情况。
解决方案
推荐阅读
- c# - 我怎样才能使我的连接字符串在类之间保持活跃
- c - 静态内联 void 函数有警告“控制到达非 void 函数的末尾”
- database - psycopg2.NotSupportedError:带有 ON CONFLICT 子句的 INSERT 不能与具有 INSERT 或 UPDATE 规则的表一起使用
- javascript - 使用原型模式和创建传单地图:onEachFeature 函数出错
- python - 我可以通过公共点更改数据框中的集群/标签的标签吗?
- ada - 枚举字面量也用作参数名称
- api - 纽约时报 Api - 获取图像 url 的问题
- excel - excel vba - 返回两个值,传递一个输入参数
- amazon-web-services - codepipeline 中是否有任何 API 返回管道失败的消息?
- python - 第一行的数据应该等于最后一行 - 使用 Pandas