我有一个具有默认构造函数的类,也是一个带有一组参数的重载构造函数.这些参数与对象上的字段匹配,并在构造时分配.此时我需要默认构造函数用于其他目的,所以我想保留它,如果可以的话.
我的问题:如果我删除默认构造函数并传入JSON字符串,该对象将正确反序列化并传入构造函数参数而不会出现任何问题.我最终以我期望的方式取回填充的对象.但是,只要我将默认构造函数添加到对象中,当我调用JsonConvert.DeserializeObject<Result>(jsontext)属性时就不再填充了.
此时我尝试添加new JsonSerializerSettings(){CheckAdditionalContent = true}反序列化调用.那什么都没做.
另一个说明.除了参数以小写字母开头之外,构造函数参数确实与字段的名称完全匹配.我不认为这很重要因为,就像我提到的,反序列化工作正常,没有默认构造函数.
这是我的构造函数的示例:
public Result() { }
public Result(int? code, string format, Dictionary<string, string> details = null)
{
Code = code ?? ERROR_CODE;
Format = format;
if (details == null)
Details = new Dictionary<string, string>();
else
Details = details;
}
Run Code Online (Sandbox Code Playgroud) 我正在为 .NET Core 3.x 更新一些应用程序,作为其中的一部分,我正在尝试Json.NET从新System.Text.Json类迁移。使用 Json.NET,我可以反序列化一个匿名类型,如下所示:
var token = JsonConvert.DeserializeAnonymousType(jsonStr, new { token = "" }).token;
Run Code Online (Sandbox Code Playgroud)
新命名空间中是否有等效的方法?
我尝试使用System.Text.Json.Serialization命名空间将 JSON 文件中的文本反序列化为名为 Note 的对象,然后访问其属性。稍后的目的是读入多个 Note 对象,然后存储在列表中。
除了 DOTNET 文档https://learn.microsoft.com/en-us/dotnet/standard/serialization/system-text-json-how-之外,似乎没有很多关于使用此命名空间的示例到
这是我根据给出的例子进行的尝试。这会引发如下所示的错误,如果您知道我做错了什么,请告诉我,谢谢。
class Note
{
public DateTime currentDate { get; set; }
public string summary { get; set; }
public Note(DateTime _date, string _sum)
{
currentDate = _date;
summary = _sum;
}
}
class Program
{
static void Main(string[] args)
{
//Write json data
string path = @"D:\Documents\Projects\Visual Projects\Notes Data\ThingsDone.json";
DateTime date = DateTime.Now;
string givenNote = "summary text";
Note completeNote = new Note(date, givenNote);
string serialString …Run Code Online (Sandbox Code Playgroud)