unity Newtonsoft.Json读取静态成员
时间: 2025-05-03 16:22:39 浏览: 12
### 在 Unity 中使用 Newtonsoft.Json 处理带静态成员的反序列化
当尝试通过 `Newtonsoft.Json` 库在 Unity 中反序列化包含静态字段或属性的对象时,需要注意的是,默认情况下 Json.NET 不会处理静态成员。为了使这些静态成员能够被正确初始化,在定义类结构时可以采用特定的方法。
对于希望让某些静态数据成为可序列化的部分,一种解决方案是在类中实现自定义的序列化逻辑。可以通过重写 `JsonConverter` 类来创建一个转换器专门用于此类对象[^1]:
```csharp
public class MyClassWithStaticMembers : JsonConverter<MyClass>
{
public override void WriteJson(JsonWriter writer, MyClass value, JsonSerializer serializer)
{
JObject jo = new JObject();
// 添加实例成员到 JSON 对象
foreach (var prop in typeof(MyClass).GetProperties(BindingFlags.Public | BindingFlags.Instance))
jo.Add(prop.Name, JToken.FromObject(prop.GetValue(value)));
// 将静态成员也加入其中
var staticPropValue = typeof(MyClass).GetProperty("MyStaticProperty",
BindingFlags.Public | BindingFlags.Static)?.GetValue(null);
if(staticPropValue != null){
jo.Add("MyStaticProperty", JToken.FromObject(staticPropValue));
}
jo.WriteTo(writer);
}
public override MyClass ReadJson(JsonReader reader, Type objectType, MyClass existingValue, bool hasExistingValue, JsonSerializer serializer)
{
var obj = JObject.Load(reader);
// 创建新实例并填充其公共实例属性/字段
var targetObj = Activator.CreateInstance(objectType) as MyClass;
foreach(var property in obj.Properties())
{
var instancePropInfo = objectType.GetProperty(property.Name,
BindingFlags.Public | BindingFlags.Instance);
if(instancePropInfo != null && !property.Name.Equals("MyStaticProperty"))
{
instancePropInfo.SetValue(targetObj, Convert.ChangeType(property.Value.ToObject(), instancePropInfo.PropertyType),null);
}else if(property.Name.Equals("MyStaticProperty")){
// 设置静态属性值
var staticPropInfo = objectType.GetProperty("MyStaticProperty",
BindingFlags.Public | BindingFlags.Static);
if(staticPropInfo!=null){
staticPropInfo.SetValue(null,Convert.ChangeType(property.Value.ToObject(),staticPropInfo.PropertyType));
}
}
}
return targetObj;
}
}
```
此外还可以考虑利用 `[JsonProperty]` 特性标记那些应该参与序列化进程中的静态成员,并配合编写相应的辅助方法来进行手动赋值操作[^2]。
然而更推荐的做法可能是重新设计模型以避免依赖于静态状态存储重要业务逻辑所需的数据;因为这不仅简化了JSON序列化过程本身,同时也提高了代码质量和维护效率。
阅读全文
相关推荐


















