【发布时间】:2021-01-26 10:22:21
【问题描述】:
只是想知道是否有人知道将 JSON 结构反序列化升级为新类类型的最佳方法。
进一步解释遗留值是
public string author;
这已在 api 中更新为以下内容
public class Author
{
public string name;
public string email;
public string url;
}
public Author author;
所以现在我遇到了一个问题,即任何遗留数据都不能正确反序列化,因为它曾经是一个字符串,现在它是一个类。
我目前的解决方案是,如果它无法反序列化,则将其放入具有旧结构的类中,然后使用它进入新结构,但我觉得必须有更好的方法来转换旧的 sting 值作为流程的一部分进入新的类值。
谢谢
EDIT-1:
好的,我在下面的转换器方面取得了一些进展
public class AuthorConverter : JsonConverter
{
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
Author user = (Author)value;
writer.WriteValue(user);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
Author author = new Author();
Debug.Log(objectType + " " + reader.Value);
if (reader.TokenType == JsonToken.String)
{
author.name = (string) reader.Value;
}
else if(reader.TokenType == JsonToken.StartObject)
{
try
{
JObject jObject = JObject.Load(reader);
if (jObject.TryGetValue("name", out JToken name))
{
author.name = name.Value<string>();
}
if (jObject.TryGetValue("email", out JToken email))
{
author.email = email.Value<string>();
}
if (jObject.TryGetValue("url", out JToken url))
{
author.url = url.Value<string>();
}
}
catch (Exception e)
{
UnityEngine.Debug.Log(e);
throw;
}
}
return author;
}
似乎一切都在工作,但感觉必须将值 1 乘 1 并转换过来有点繁琐,我尝试使用 jObject.ToObject 方法,但似乎导致了无限循环。无论哪种方式都有效,但我确信有更好的方法,所以仍然欢迎想法。
【问题讨论】: