C# XmlSerializer与属性';net框架和.net核心上的私有getter

C# XmlSerializer与属性';net框架和.net核心上的私有getter,c#,.net,xmlserializer,C#,.net,Xmlserializer,我使用了一个第三方nuget包,它支持.net核心和.net框架(.net标准) 我的项目是一个.net framework 4.62项目,当我使用第三方时,我收到了来自XmlSerializer的异常 问题是由于某个属性中的私人getter造成的 只能序列化公共属性和字段。属性必须具有公共访问器(get和set方法)。如果需要序列化非公共数据,请使用BinaryFormatter类而不是XML序列化 在收到这个错误后,我尝试打开一个.NETCore2.2项目,使用了相同的第三方nuget,并

我使用了一个第三方nuget包,它支持.net核心和.net框架(.net标准)

我的项目是一个.net framework 4.62项目,当我使用第三方时,我收到了来自
XmlSerializer
的异常

问题是由于某个属性中的私人getter造成的

只能序列化公共属性和字段。属性必须具有公共访问器(get和set方法)。如果需要序列化非公共数据,请使用BinaryFormatter类而不是XML序列化

在收到这个错误后,我尝试打开一个.NETCore2.2项目,使用了相同的第三方nuget,并看到相同的代码在那里工作

他是再现问题的代码的一个小例子:

public class Test
{
    public string TestProp { private get; set; }
}

// Exception on .net 462 and works on .net core 2.2
var serializer = XmlSerializer.FromTypes(new[] { typeof(Test) });
那么,这是.net核心实现上的一个bug还是一个特性? 我能做些什么来支持这个在.net框架上运行的程序,而不需要重新启动和修复代码吗?

这里的“错误”是它在不同的时间失败;在net462上,它在FromTypes的
过程中失败;在
netcoreapp2.2
netcoreapp3.0
上,它在
序列化过程中失败,原因是:

System.InvalidOperationException:生成XML文档时出错。 --->System.MethodAccessException:尝试通过方法“Microsoft.Xml.Serialization.GenerateAssembly.XmlSerializationWriterTest.Write2Test(System.String,System.String,Test,Boolean,Boolean)”访问方法“Test.get_TestProp()”失败

所以。。。在我看来,这真的不值得担心。没有真正的特性差异,我的意思是:这两种方式都不起作用。所以就。。。不要那样做

但是:如果你真的想的话,你可以把它作为一个bug记录在github上,甚至可以提交一个PR,这样它就可以更早地失败

也就是说:如果你加上:

public bool应该序列化testprop()=>false;

然后它将在
netcoreapp2.2
netcoreapp3.0
上实际工作,这是。。。我想不错吧?甚至可以被认为是不改变新行为的理由。

第三方nuget在.netcore 2.2上工作,因为它只使用
反序列化方法。我在问题中使用的例子只是为了重现这个问题。当.net framework XmlSerializer实现尝试为该类型创建序列化程序时,它似乎加载了某种类型的属性信息缓存以进行序列化和反序列化,.net核心实现延迟了这一过程。。似乎我需要提交一份公关或第三方来支持这一点。非常感谢。