【发布时间】:2018-05-02 20:25:10
【问题描述】:
好的,所以基本上我正在尝试从字符串中获得反序列化和序列化 C#(统一)中的自定义类的窍门。 Json 似乎是显而易见的方法,并且可以与我计划用来存储玩家数据的 mysql 一起使用。
我无法通过我试图运行的测试字符串示例来创建一个“虚拟”playerdata 对象。从那里我将在登录时将播放器对象传递给播放器上的 Initialize 方法。
我再次尝试使用(虚拟)字符串(mysql 查询的结果对吗?)来生成玩家数据对象。这就是我所拥有的。
PlayerData.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[System.Serializable]
public class PlayerData
{
public string Name {get; protected set;}
public uint Attack {get; protected set;}
public uint Defense {get; protected set;}
public uint Armor {get; protected set;}
public uint MovementSpeed {get; protected set;}
public uint MagicLevel {get; protected set;}
public static PlayerData Serialize(string obj)
{
return JsonUtility.FromJson<PlayerData>(obj);
}
}
我用来运行它的代码是这样的:
String test = @"{
""Name"": ""Chase"",
""Attack"" : 50,
""Defense"" : 35,
""Armor"" : 12,
""MovementSpeed"" : 60,
""MagicLevel"" : 15,
}";
PlayerData data = PlayerData.Serialize(test);
Debug.Log(data.Attack);
我得到的错误是这样的。
ArgumentException:JSON 解析错误:缺少对象成员的名称。
我在这里真的需要帮助,我尝试用双引号封装 int 变量,尝试对所有值做同样的事情,地狱我尝试了很多方法,每次都是错误或无效值。任何帮助将不胜感激。
【问题讨论】:
-
为什么要自己创建字符串而不是序列化现有对象?此外,您的措辞倒置。序列化是
object -> json,反序列化是json -> object -
计划是从查询到 mysql 构建一个字符串以收集数据,然后将该字符串传递给 playerdata 类的静态方法,以使用查询提供的数据生成 playerdata 实例。所以我不会有实际的 JSON 文件,只有从数据库中提取的值。
-
您不应该构建字符串,序列化/反序列化的全部意义在于使用对象。您可以从 MySql 中收集您需要的值,但您需要将这些值添加到一个对象中,然后将该对象序列化以获取 JSON。
-
我正在反序列化,我只是错误地命名了我的方法。我有字符串格式的 JSON,我想把它变成一个对象。 json -> 对象...反序列化。
-
我可以从你反序列化的代码中看出,我只是想让你知道它不应该被称为
Serialize()。别担心,我明白了
标签: c# json unity3d deserialization