Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.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# .NET4.x抱怨与.NET3.5相反的非公共属性的反序列化-如何修复?_C#_Unity3d_.net 3.5 - Fatal编程技术网

C# .NET4.x抱怨与.NET3.5相反的非公共属性的反序列化-如何修复?

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映射

我将项目的unity脚本运行时从.NET3.5升级到了4.x。在运行时,当对XML文件进行反序列化时,会出现以下错误:

InvalidOperationException:无法反序列化类型 “xxxxxx.Module.Impl.WebModule”,因为它包含属性 “wellConfig”没有公共设置器。 System.Xml.Serialization.TypeScope.GetSettableMembers (System.Xml.Serialization.StructMapping映射, System.Collections.ArrayList(列表)

这是相关属性:

[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; }
}