При сериализации 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();
}
}
memoryStream.GetBuffer()
, которая содержит тонну пустого места в конце буфера. - person DavidG   schedule 30.01.2018