Сериализация JSON с помощью DataContractJsonSerializer в C# дает завершающие нулевые символы (\0)

При сериализации JSON я получаю завершающие нулевые символы, что приводит к сбою моего модульного теста. Сериализатор выглядит так:

public static string SerializeJSON<T>(T ObjectToSerialize)
    {
        DataContractJsonSerializer serializer = new DataContractJsonSerializer(ObjectToSerialize.GetType());

        using (MemoryStream memoryStream = new MemoryStream())
        {
            using (var jsonWriter = JsonReaderWriterFactory.CreateJsonWriter(memoryStream, Encoding.UTF8, false, true))
            {
                serializer.WriteObject(jsonWriter, ObjectToSerialize);
            }
            return Encoding.UTF8.GetString(memoryStream.GetBuffer());
        }
    }

Я написал для него модульный тест, который выглядит так:

[TestMethod]
    public void SerializeJSON()
    {
        string testJSON = File.ReadAllText(@"Util\\TestCurrency.json");
        Currency currency = StaticExamples.ccy1;
        string json = SerializeUtil.SerializeJSON(currency);
        Assert.AreEqual(testJSON, json);
    }

Что сравнивает сериализованную валюту с примером файла, они должны быть идентичными. Но тест не говорит:

Message: Assert.AreEqual failed. Expected:<{
"code": "USD",
"currencyId": 1,
"name": "Dollar",
"status": "Active"
}>. 
Actual:<{
"code": "USD",
"currencyId": 1,
"name": "Dollar",
"status": "Active"
}\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0>. 

Насколько я понимаю, конечные символы - это нулевые символы. Есть идеи, почему они появляются? Он работает, чтобы снова десериализовать этот JSON, но мой тест все еще не работает. Это сериализуемый класс:

public class Currency
{       
    public int currencyId { get; set; }
    public string code { get; set; }
    public string name { get; set; }
    public string status { get; set; }
}

ИЗМЕНИТЬ с ответом Благодаря @DavidG я изменил способ преобразования потока в строку, и теперь он работает. Это общий код сериализатора для всех, кто хочет:

public static string SerializeJSON<T>(T ObjectToSerialize)
    {
        DataContractJsonSerializer serializer = new DataContractJsonSerializer(ObjectToSerialize.GetType());

        using (MemoryStream memoryStream = new MemoryStream())
        {
            using (var jsonWriter = JsonReaderWriterFactory.CreateJsonWriter(memoryStream, Encoding.UTF8, false, true))
            {
                serializer.WriteObject(jsonWriter, ObjectToSerialize);
            }
            memoryStream.Position = 0;
            return new StreamReader(memoryStream).ReadToEnd();
        }
    }

person Erik    schedule 30.01.2018    source источник
comment
Попробуйте это, чтобы вместо этого получить свою строку /вопросы/6161453/   -  person DavidG    schedule 30.01.2018
comment
Спасибо @DavidG! Это сработало отлично! Это мелочи... Знаете, почему он так себя вел?   -  person Erik    schedule 30.01.2018
comment
Ну, вы пытаетесь получить строку из memoryStream.GetBuffer(), которая содержит тонну пустого места в конце буфера.   -  person DavidG    schedule 30.01.2018