c# - 使用 Json.Net 的 JObject.FromObject 方法进行序列化时,我可以使用自定义 ContractResolver 吗?

标签 c# serialization json.net

如果我使用 JsonConvert.SerializeObject 序列化一个对象,指定自定义契约解析器的方法是这样的:

var serializerSettings = new JsonSerializerSettings { ContractResolver = MyContractResolver.Instance };
var serializedString = JsonConvert.SerializeObject( myObject, Formatting.None, serializerSettings )

但是,我们应用程序的一部分使用这种方法进行序列化:

var serializedString = JObject.FromObject(myObject).ToString();

一个方法调用 FromObject 来创建 JObject,然后将其传递给需要 JObject 的接口(interface),然后调用 ToString 方法。鉴于我必须支持该接口(interface),我需要传递一个 JObject,而不是一个字符串。 Json.Net 中还有另一个可用的 API:

public static JObject FromObject(
    Object o,
    JsonSerializer jsonSerializer
)

是否有默认的 JsonSerializer,我可以在此调用中使用但添加到我的自定义契约(Contract)解析器中?

最佳答案

你可以使用

var serializerSettings = new JsonSerializerSettings { ContractResolver = MyContractResolver.Instance };
var serializer = JsonSerializer.CreateDefault(serializerSettings);
var serializedString = JObject.FromObject(myObject, serializer).ToString();

JsonSerializer.CreateDefault 将使用默认设置 (JsonConvert.DefaultSettings) 创建序列化器,然后将您提供的设置合并到它们中。

如果您不需要这些默认设置,请使用

JsonSerializer.Create(serializerSettings)

这只会使用您提供的设置创建序列化程序(不会与默认值合并)。

关于c# - 使用 Json.Net 的 JObject.FromObject 方法进行序列化时,我可以使用自定义 ContractResolver 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50063803/

相关文章:

c# - 如何安全地反序列化键/数据格式 JSON 响应

c# - Unity如何使用从json字符串加载的变量作为更新部分的输入

c# - 无法使用 C# 从 XElement 中删除空的 xmlns 属性

c#处理返回值并执行代码

c# - Linq 在列表的每个项目中包含属性

android - 将 Firebase 数据快照反序列化为 Kotlin 数据类

c# - 为什么不能 UnRegisterStartupScript?

java - 在 android 中保存和加载我的对象时出现 StackOverflowError

java - 序列化以反序列化订单信息

c# - 使用 JSON.NET 连续序列化列表