C# 如何在不调用构造函数的情况下创建对象?

C# 如何在不调用构造函数的情况下创建对象?,c#,.net,reflection,microsoft-metro,C#,.net,Reflection,Microsoft Metro,我想实现一些非标准的序列化格式 当我进行反序列化时,我需要在不调用构造函数的情况下创建对象的实例 有 .NET框架中的System.Runtime.Serialization.FormatterServices.GetUninitializedObject(类型),但Windows Metro框架中没有FormatterServices类 在Windows Metro框架中,有人知道如何在不调用构造函数的情况下实例化对象吗?据我所知:你不能。您也无法调用私有/受保护/内部构造函数:。netcor

我想实现一些非标准的序列化格式

当我进行反序列化时,我需要在不调用构造函数的情况下创建对象的实例


.NET
框架中的
System.Runtime.Serialization.FormatterServices.GetUninitializedObject(类型)
,但Windows Metro框架中没有
FormatterServices


在Windows Metro框架中,有人知道如何在不调用构造函数的情况下实例化对象吗?

据我所知:你不能。您也无法调用私有/受保护/内部构造函数:。netcore具有受限反射(与Silverlight模型类似,但会增加GetTypeInfo()的麻烦)


我能建议的唯一选项是,可能为用户提供的工厂方法提供单独的支持,该方法可以执行适当的操作,或者类似地,可以传递工厂接口。这将从序列化引擎中移除构造,并使其重新控制了解特定类型的代码。

我可能错了,但当实例化对象时,至少必须运行构造函数。即使没有声明构造函数,也会调用默认的空构造函数。实例化使类成为对象

所以对我来说你的问题没有答案


如果需要,您可以在运行时构建一个默认的空构造函数

你不能。不清楚您认为需要取消初始化的原因object@Ramhound,原因是如果没有默认构造函数,我不知道调用哪个构造函数。我假设
System.Runtime.Serialization.Json.DataContractJsonSerializer
以同样的方式工作,因为当它反序列化对象时,它不会调用任何构造函数。Iirc,on.netcore DataContractSerializer(和friends)确实运行无参数构造函数。不过,我可能错了。@ramhound,这不是“取消初始化”对象,而是在不初始化对象的情况下创建对象,在序列化中非常常见。@alexander出于好奇,它的格式是什么?它是一种通用的东西吗?或者是特定于您的场景?我问这个问题的原因是:我深入参与了序列化代码,并且我有针对.netcore和其他平台的现有技术/工具。如果它对其他开发人员有用,我可能会抽出一些时间来帮助您为此目的构建一个F/OSS库(免费窃取protobuf net源代码的大块)。如果不是,那么,您可能仍然会发现其中一些代码可供参考。这是不典型的,通常仅由库代码(如序列化引擎、RPC/代理工具和数据库ORM工具)使用。真正的问题是:“这个存在于常规.net中的功能:它存在于.netcore中吗?”。此外,您不能通过反射将构造函数添加到现有类型中,并且.netcore中根本不存在反射发射。