C# 反序列化对象时的JsonReaderException
我试图理解JSON的C#序列化/反序列化,因此编写了以下类以提供帮助C# 反序列化对象时的JsonReaderException,c#,json,.net,json.net,C#,Json,.net,Json.net,我试图理解JSON的C#序列化/反序列化,因此编写了以下类以提供帮助 using Newtonsoft.Json; using System; using System.Collections.Generic; namespace HelloWorld { class Size { public double ArmLength { get; set; } public HandPosition HandPosition { get; set;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
namespace HelloWorld
{
class Size
{
public double ArmLength { get; set; }
public HandPosition HandPosition { get; set; }
}
class HandPosition
{
public double X { get; set; }
public double Y { get; set; }
public double Z { get; set; }
}
class Dictionary
{
static void Main(string[] args)
{
Size size = new Size();
size.ArmLength = 2.13;
size.HandPosition = new HandPosition
{
X = 2.13,
Y = 2.14,
Z = 2.15
};
string output = JsonConvert.SerializeObject(size, Formatting.Indented);
Console.WriteLine("Output: " + output);
var values = JsonConvert.DeserializeObject<Dictionary<string, string>>(output);
Console.WriteLine(decimal.Parse(values["HandPosition"]["X"]));
Console.WriteLine(decimal.Parse(values["ArmLength"]));
Console.WriteLine("Press Enter to continue");
Console.Read();
}
}
}
使用Newtonsoft.Json;
使用制度;
使用System.Collections.Generic;
名称空间HelloWorld
{
班级人数
{
公共双臂长度{get;set;}
公共手持位置手持位置{get;set;}
}
类手位
{
公共双X{get;set;}
公共双Y{get;set;}
公共双Z{get;set;}
}
类词典
{
静态void Main(字符串[]参数)
{
尺寸=新尺寸();
尺寸.臂长=2.13;
size.HandPosition=新的HandPosition
{
X=2.13,
Y=2.14,
Z=2.15
};
字符串输出=JsonConvert.SerializeObject(大小、格式、缩进);
Console.WriteLine(“输出:”+Output);
var values=JsonConvert.DeserializeObject(输出);
Console.WriteLine(decimal.Parse(值[“HandPosition”][“X”]);
Console.WriteLine(decimal.Parse(值[“ArmLength]”));
Console.WriteLine(“按Enter键继续”);
Console.Read();
}
}
}
当我运行它时,我在var values=JsonConvert.DeserializeObject(输出)处得到以下异常代码>:
Newtonsoft.Json.JsonReaderException:'分析值时遇到意外字符:{.Path'HandPosition',第3行,位置19'
我在这里做错了什么?我该如何解决它?您已经把它复杂化了。要反序列化一个对象,您需要做的就是调用JsonConvert。反序列化对象(输出)
其中Size
也是您反序列化的类型
static void Main(string[] args)
{
Size size = new Size();
size.ArmLength = 2.13;
size.HandPosition = new HandPosition
{
X = 2.13,
Y = 2.14,
Z = 2.15
};
string output = JsonConvert.SerializeObject(size, Formatting.Indented);
Console.WriteLine("Output: " + output);
var deserializeSize = JsonConvert.DeserializeObject<Size>(output);
Console.WriteLine($"deserializeSize.Handposition.X = {deserializeSize.HandPosition.X}");
Console.WriteLine($"deserializeSize.ArmLength = {deserializeSize.ArmLength}");
Console.WriteLine("Press Enter to continue");
Console.Read();
}
static void Main(字符串[]args)
{
尺寸=新尺寸();
尺寸.臂长=2.13;
size.HandPosition=新的HandPosition
{
X=2.13,
Y=2.14,
Z=2.15
};
字符串输出=JsonConvert.SerializeObject(大小、格式、缩进);
Console.WriteLine(“输出:”+Output);
var deserializeSize=JsonConvert.DeserializeObject(输出);
WriteLine($“deserializeSize.Handposition.X={deserializeSize.Handposition.X}”);
WriteLine($“deserializeSize.ArmLength={deserializeSize.ArmLength}”);
Console.WriteLine(“按Enter键继续”);
Console.Read();
}
作为警告,我不鼓励使用.NET内置类作为自定义类名,因为当有多个类名相同时,它可能会变得混乱。Dictionary
和Size
在您的情况下是有问题的。因为HandPosition
是一个对象。您尝试过Dictionary
吗?