[英]Trying to serialize an object to a stream using Newtonsoft, getting an empty stream
我有一個程序示例:
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() + ")");
}
}
你需要沖洗你的作家。
new JsonSerializer().Serialize(jsonWriter, new { name = "Jamie" });
jsonWriter.Flush();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.