Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 反序列化对象时的JsonReaderException_C#_Json_.net_Json.net - Fatal编程技术网

C# 反序列化对象时的JsonReaderException

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;

我试图理解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; }
    }

    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
吗?