C# .NET4.x抱怨与.NET3.5相反的非公共属性的反序列化-如何修复?
我将项目的unity脚本运行时从.NET3.5升级到了4.x。在运行时,当对XML文件进行反序列化时,会出现以下错误: InvalidOperationException:无法反序列化类型 “xxxxxx.Module.Impl.WebModule”,因为它包含属性 “wellConfig”没有公共设置器。 System.Xml.Serialization.TypeScope.GetSettableMembers (System.Xml.Serialization.StructMapping映射, System.Collections.ArrayList(列表) 这是相关属性:C# .NET4.x抱怨与.NET3.5相反的非公共属性的反序列化-如何修复?,c#,unity3d,.net-3.5,C#,Unity3d,.net 3.5,我将项目的unity脚本运行时从.NET3.5升级到了4.x。在运行时,当对XML文件进行反序列化时,会出现以下错误: InvalidOperationException:无法反序列化类型 “xxxxxx.Module.Impl.WebModule”,因为它包含属性 “wellConfig”没有公共设置器。 System.Xml.Serialization.TypeScope.GetSettableMembers (System.Xml.Serialization.StructMapping映射
[XmlElement("WebWellConfiguration")]
public WebWellConfiguration wellConfig { get; protected set; }
当我删除“protected”访问修饰符时,错误消失,反序列化成功,但我不想这样做
- 为什么unity scripting runtime 3.5对非公共setter的反序列化没有问题,但4.x没有这样做
- 如何在不删除受保护或专用访问修饰符的情况下解决此问题李>
专用
支持字段来代替
这样做还有一个额外的副作用:您现在还应该能够通过Unity Inspector查看和配置此字段
当然,假设
webwell配置
已经是[Serializable]
。。否则它将根本无法(反)序列化。受保护集
意味着它只能由类或其子类分配一个值。序列化几乎总是通过外部类完成的。您的选择是:(a)公共集
或(b)[非串行化]
谢谢,但此代码会导致相同的错误。顺便问一下,为什么要使用[SerializeField]?包含此属性的类不是MonoBehavior。是的,但希望该类是[Serializable]
,否则它应该根本无法序列化它[SerializeField]
不仅适用于单一行为
,而且适用于[Serialized]
的任何类。请立即重试。。当然,字段的命名必须与数据匹配,否则反序列化程序将再次尝试写入属性本身。您可能需要在其他使用该属性的脚本中修复该名称。我再次尝试(复制粘贴代码),但仍然收到相同的错误消息。
[XmlElement("WebWellConfiguration")]
// [SerializeField] allows to mark private fields for serialization
[SerializeField] private WebWellConfiguration wellConfig;
// since this is now no longer an auto-property but
// using a backing field this one won't be serialized at all
public WebWellConfiguration WellConfig
{
get { return wellConfig; }
protected set { wellConfig = value; }
}