2015-03-13 69 views
-2

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

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

在此先感谢,

文森佐。

回答

2

这不工作吗?

string json = "{\"Name\":\"Max\"}"; 
string withoutBrackets = json.Substring(1, json.Length - 2); 

替代使用正则表达式:

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

喜弗洛里安,感谢您的答复我已经\t以为您的解决方案,但是,我的首要原因,我需要避免序列化改造后,这就是为什么我需要去串行里面为了避免调用方法:writer.WriteStartObject();和writer.WriteEndObject(); – 2015-03-13 14:10:32

+0

@vincenzogreco通常最简单的解决方案是你可以选择的......你必须问自己,结果会有什么不同?实现自定义转换器可能会导致您达到目标,但复杂性成本如何?你可以简单地写一个扩展方法从字符串中剥离外部括号,并且可以在任何需要的地方使用它... – 2015-03-13 14:45:44

2

你不必修饰类与转换器,当你序列化对象可以提供转换器将串行和转换器就知道了它可以序列化的类型。 (在方法CanConvert上)

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

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

嗨安吉洛感谢您的回复,但我想要一个通用的方法,而您的示例是特定的。 – 2015-03-15 16:05:24