C# 使用Json.Net';序列化时,我可以使用自定义ContractResolver吗;s JObject.FromObject方法?

C# 使用Json.Net';序列化时,我可以使用自定义ContractResolver吗;s JObject.FromObject方法?,c#,serialization,json.net,C#,Serialization,Json.net,如果使用JsonConvert.SerializeObject序列化对象,则指定自定义协定解析器的方法如下: var serializerSettings = new JsonSerializerSettings { ContractResolver = MyContractResolver.Instance }; var serializedString = JsonConvert.SerializeObject( myObject, Formatting.None, serializerSe

如果使用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的接口,该接口随后调用ToString方法。考虑到我必须支持该接口,我需要传递一个JObject,而不是字符串。Json.Net中还有另一个可用的API:

public static JObject FromObject(
    Object o,
    JsonSerializer jsonSerializer
)
是否有一个默认的JsonSerializer,我可以在这个调用中使用,但要添加到我的自定义契约解析器中

您可以使用

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)

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

您可以使用
JsonSerializer.CreateDefault(serializerSettings)
Thx。我试试看。使用Json.Net几个月后,你可能会认为我可以解决这个问题…@Evk你的建议有效。加上它作为答案,我将投票!一位同事建议我为类中的每个属性添加名为“ShouldSerializeXXX”的方法。我最后就是这样做的。我不知道那个功能!但是,如果您处理的是无法修改的第三方类,那么这种方法是必不可少的。