C# 使用通用自定义转换器重写Newtonsoft序列化

C# 使用通用自定义转换器重写Newtonsoft序列化,c#,json.net,C#,Json.net,我知道我可以定义一个自定义转换器,但在这种情况下,我必须装饰我想使用我的转换器序列化的类,我想定义一个默认序列化方法的重载,以便个性化序列化,但保持它的通用性(我的意思是它应该适用于每种类型的对象) 目标是生成一个没有主括号的“json” 提前感谢, Vincenzo.这不也行吗 string json = "{\"Name\":\"Max\"}"; string withoutBrackets = json.Substring(1, json.Length - 2); 使用正则表达式的替代方

我知道我可以定义一个自定义转换器,但在这种情况下,我必须装饰我想使用我的转换器序列化的类,我想定义一个默认序列化方法的重载,以便个性化序列化,但保持它的通用性(我的意思是它应该适用于每种类型的对象)

目标是生成一个没有主括号的“json”

提前感谢,


Vincenzo.

这不也行吗

string json = "{\"Name\":\"Max\"}";
string withoutBrackets = json.Substring(1, json.Length - 2);
使用正则表达式的替代方法:

string withoutBrackets = Regex.Replace(json, @"(?:^\{)|(?:\}$)",string.Empty);

您不必用转换器装饰类,当您序列化对象时,您可以向序列化程序提供转换器,并且转换器将知道它可以序列化哪些类型。(关于CanConvert方法)

下面是一小段代码,其中我们使用自定义转换器DataRowCollectionConverter以特定方式转换数据行类型对象的集合。 DataRowCollectionConverter是一个JsonConverter

 this.Result = JsonConvert.SerializeObject(result,  DataRowCollectionConverter());;

您好Florian,感谢您的回复我已经想到了您的解决方案,但是,出于我的主要原因,我需要避免序列化后的转换,这就是为什么我需要进入序列化程序以避免调用方法:writer.WriteStartObject();和writer.WriteEndObject()@vincenzogreco通常最简单的解决方案是选择。。。你必须问问自己,结果会有什么不同吗?实现自定义转换器可能会使您达到目标,但复杂性的代价是什么?您可以简单地编写一个扩展方法,用于从字符串中剥离外括号,并可以在任何需要的地方使用它……嗨,Angelo,谢谢您的回答,但我希望使用一个通用方法,因为您的示例是特定的。