簡體   English   中英

嘗試使用 Newtonsoft 將對象序列化為流,得到一個空流

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM