Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Json.NET是否可以序列化为具有格式的流?_C#_Json_Json.net - Fatal编程技术网

C# 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,

使用Json.NET库时,可以在序列化为字符串时指定格式,但在直接序列化为流时,我找不到此选项。我错过什么了吗

两种序列化方法的代码如下所示:

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:如果我把它改为实例方法,你会问吗?(事实上,这是一个静态的问题——我可能只是抄袭了它。)对我来说,这只是一个奇怪的问题。