C# Json.NET是否可以序列化为具有格式的流?
使用Json.NET库时,可以在序列化为字符串时指定格式,但在直接序列化为流时,我找不到此选项。我错过什么了吗 两种序列化方法的代码如下所示:C# Json.NET是否可以序列化为具有格式的流?,c#,json,json.net,C#,Json,Json.net,使用Json.NET库时,可以在序列化为字符串时指定格式,但在直接序列化为流时,我找不到此选项。我错过什么了吗 两种序列化方法的代码如下所示: public static string Serialize(MyObject obj) { JsonSerializerSettings settings = GetJsonSerializerSettings(); return JsonConvert.SerializeObject(obj, Formatting.Indented,
public static string Serialize(MyObject obj)
{
JsonSerializerSettings settings = GetJsonSerializerSettings();
return JsonConvert.SerializeObject(obj, Formatting.Indented, settings);
}
public static void SerializeToStream(MyObject obj, Stream stream)
{
var serializer = JsonSerializer.Create(GetJsonSerializerSettings());
using (var sw = new StreamWriter(stream))
using (var jsonTextWriter = new JsonTextWriter(sw))
{
serializer.Serialize(jsonTextWriter, obj);
}
}
private static JsonSerializerSettings GetJsonSerializerSettings()
{
JsonSerializerSettings settings = new JsonSerializerSettings
{
Converters = new List<JsonConverter>
{
new StringEnumConverter()
}
};
return settings;
}
公共静态字符串序列化(MyObject obj)
{
JsonSerializerSettings=GetJsonSerializerSettings();
返回JsonConvert.SerializeObject(对象、格式、缩进、设置);
}
公共静态流(MyObject对象,流)
{
var serializer=JsonSerializer.Create(GetJsonSerializerSettings());
使用(var sw=新StreamWriter(流))
使用(var jsonTextWriter=newjsontextwriter(sw))
{
serializer.Serialize(jsonTextWriter,obj);
}
}
私有静态JsonSerializerSettings GetJsonSerializerSettings()
{
JsonSerializerSettings设置=新的JsonSerializerSettings
{
转换器=新列表
{
新的StringEnumConverter()
}
};
返回设置;
}
我还没有尝试过,但如果您在设置中指定格式,我希望它会很好:
public static void SerializeToStream(MyObject obj, Stream stream)
{
var settings = GetJsonSerializerSettings();
settings.Formatting = Formatting.Indented;
var serializer = JsonSerializer.Create(settings);
using (var sw = new StreamWriter(stream))
using (var jsonTextWriter = new JsonTextWriter(sw))
{
serializer.Serialize(jsonTextWriter, obj);
}
}
(当然,也可以用类似的方式更改
GetJsonSerializerSettings
)大家好!只是想知道为什么要使用这种方法静态。谢谢@质子:那你为什么不希望它是静态的呢?它不需要访问任何实例状态,也没有实现继承有用的接口或类似的东西。。。为什么是反问句?我问是因为我不知道。我不是来质问你在这个主题上的权威。@8protons:如果我把它改为实例方法,你会问吗?(事实上,这是一个静态的问题——我可能只是抄袭了它。)对我来说,这只是一个奇怪的问题。