C# 使用Json.Net';序列化时,我可以使用自定义ContractResolver吗;s JObject.FromObject方法?
如果使用JsonConvert.SerializeObject序列化对象,则指定自定义协定解析器的方法如下: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
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”的方法。我最后就是这样做的。我不知道那个功能!但是,如果您处理的是无法修改的第三方类,那么这种方法是必不可少的。