gpt4 book ai didi

c# - 尝试使用 Newtonsoft 将对象序列化为流,得到一个空流

转载 作者:行者123 更新时间:2023-11-30 22:55:35 26 4
gpt4 key购买 nike

我有一个程序的例子:

using System;
using Newtonsoft.Json;
using System.IO;

public class Program
{
public static void Main()
{
using (var stream = new MemoryStream())
using (var reader = new StreamReader(stream))
using (var writer = new StreamWriter(stream))
using (var jsonWriter = new JsonTextWriter(writer))
{
new JsonSerializer().Serialize(jsonWriter, new { name = "Jamie" });
Console.WriteLine("stream length: " + stream.Length); // stream length: 0
Console.WriteLine("stream position: " + stream.Position); // stream position: 0
Console.WriteLine("stream contents: (" + reader.ReadToEnd() + ")"); // stream contents: ()
}
}
}

应该(根据此页面:https://www.newtonsoft.com/json/help/html/SerializingJSON.htm)制作一个包含对象的 JSON 表示的流:obj 但实际上流似乎有长度0 写出时为空字符串。我该怎么做才能实现正确的序列化?

这是程序运行的例子:https://dotnetfiddle.net/pi1bqE

最佳答案

您需要刷新 JsonSerializer 以确保它确实将数据写入了底层流。流将位于结束位置,因此您需要将其倒回到开始位置以读取数据。

public static void Main()
{
using (var stream = new MemoryStream())
using (var reader = new StreamReader(stream))
using (var writer = new StreamWriter(stream))
using (var jsonWriter = new JsonTextWriter(writer))
{
new JsonSerializer().Serialize(jsonWriter, new { name = "Jamie" });

jsonWriter.Flush();
stream.Position = 0;

Console.WriteLine("stream contents: (" + reader.ReadToEnd() + ")");
}
}

关于c# - 尝试使用 Newtonsoft 将对象序列化为流,得到一个空流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55184350/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com