从 .NET v4.7.2 切换到 .NET Standard v2.0 时,在 DefaultContractResolver 中找不到 IgnoreSerializableAttribute
IgnoreSerializableAttribute not found in DefaultContractResolver when switching from .NET v4.7.2 to .NET Standard v2.0
我正在将我们的一个库从 .NET v4.7.2 迁移到 .NET Standard v2.0。
此代码在使用 .NET v4.7.2 时编译
var resolver = new DefaultContractResolver
{
IgnoreSerializableAttribute = true,
NamingStrategy = new CamelCaseNamingStrategy(true, true),
};
但在使用 .NET Standard 时却没有。显然,在使用 .NET Standard 时,IgnoreSerializableAttribute 不是 Newtonsoft.Json v9.01 中 DefaultContractResolver 的一部分。
我使用的是 Newtonsoft.Json 的 v9.01,因为我们仍在使用 v1.0 Azure 函数,它们仅适用于 v9.01。
任何人都可以解释发生了什么以及为什么 .NET v4.7.2 中的 Newtonsoft.Json v9.01 和 .NET Standard v2.0 之间存在差异吗?
不需要设置IgnoreSerializableAttribute
to true
because it is true
by default. This can be seen in the reference source for DefaultContractResolver
:
public DefaultContractResolver()
{
#if HAVE_BINARY_SERIALIZATION
IgnoreSerializableAttribute = true;
#endif
#pragma warning disable 618
DefaultMembersSearchFlags = BindingFlags.Instance | BindingFlags.Public;
#pragma warning restore 618
_contractCache = new ThreadSafeStore<Type, JsonContract>(CreateContract);
}
因此在 Json.NET 的所有版本上,以下代码将创建忽略 [Serializable]
属性的合同解析器:
var resolver = new DefaultContractResolver
{
NamingStrategy = new CamelCaseNamingStrategy(true, true),
};
要回答您关于为什么 Json.NET v9.0.1 在面向 .NET Standard 2.0 时 IgnoreSerializableAttribute
不存在的具体问题,这是因为v9.0.1 actually only targets .NET Standard 1.0, and Microsoft's System.SerializableAttribute
did not exist in .NET Standard 1.0. If I recall, MSFT introduced it into .NET Standard 2.0 as part of the partial port of binary serialization (now deprecated). When Json.NET added support for .NET Standard 2.0 in release 11,包括对 IgnoreSerializableAttribute
的支持。
我正在将我们的一个库从 .NET v4.7.2 迁移到 .NET Standard v2.0。
此代码在使用 .NET v4.7.2 时编译
var resolver = new DefaultContractResolver
{
IgnoreSerializableAttribute = true,
NamingStrategy = new CamelCaseNamingStrategy(true, true),
};
但在使用 .NET Standard 时却没有。显然,在使用 .NET Standard 时,IgnoreSerializableAttribute 不是 Newtonsoft.Json v9.01 中 DefaultContractResolver 的一部分。
我使用的是 Newtonsoft.Json 的 v9.01,因为我们仍在使用 v1.0 Azure 函数,它们仅适用于 v9.01。
任何人都可以解释发生了什么以及为什么 .NET v4.7.2 中的 Newtonsoft.Json v9.01 和 .NET Standard v2.0 之间存在差异吗?
不需要设置IgnoreSerializableAttribute
to true
because it is true
by default. This can be seen in the reference source for DefaultContractResolver
:
public DefaultContractResolver() { #if HAVE_BINARY_SERIALIZATION IgnoreSerializableAttribute = true; #endif #pragma warning disable 618 DefaultMembersSearchFlags = BindingFlags.Instance | BindingFlags.Public; #pragma warning restore 618 _contractCache = new ThreadSafeStore<Type, JsonContract>(CreateContract); }
因此在 Json.NET 的所有版本上,以下代码将创建忽略 [Serializable]
属性的合同解析器:
var resolver = new DefaultContractResolver
{
NamingStrategy = new CamelCaseNamingStrategy(true, true),
};
要回答您关于为什么 Json.NET v9.0.1 在面向 .NET Standard 2.0 时 IgnoreSerializableAttribute
不存在的具体问题,这是因为v9.0.1 actually only targets .NET Standard 1.0, and Microsoft's System.SerializableAttribute
did not exist in .NET Standard 1.0. If I recall, MSFT introduced it into .NET Standard 2.0 as part of the partial port of binary serialization (now deprecated). When Json.NET added support for .NET Standard 2.0 in release 11,包括对 IgnoreSerializableAttribute
的支持。