Я использую DataContractJsonSerializer
для сериализации объекта, и для этого я использую следующую функцию:
public static string Serialize<T>(T obj)
{
string returnVal = "";
try
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
using (MemoryStream ms = new MemoryStream())
{
serializer.WriteObject(ms, obj);
returnVal = Encoding.UTF8.GetString(ms.ToArray());
}
}
catch (Exception /*exception*/)
{
returnVal = "";
//log error
}
return returnVal;
}
Теперь эта функция работает хорошо и отлично .... за исключением следующей ситуации (я сомневаюсь, если это изменить, поскольку я не знаю, как это повлияет на остальную часть моего кода).
Ситуация, в которой он не работаетну
скажем, у меня есть obj (аргумент) объект, такой как:
[DataContract()]
public class theObject
{
[DataMember()]
public string image;
}
, в котором image
содержит значение Base64 BMPфайл.Это большое значение, но, например, оно должно начинаться с: "Qk1W/QAAAAAAADYAAAAoAAAAawAAAMgAAAABABgAAAAAACD9AADEDgAAxA4AAAAAAAAAAAAA////////////////////////////////////7+/...."
Итак, вы видите, что оно содержит много /
с.
Так что, когда я передаю этот объект в Serialize
, он будет WriteObject
в мс, а затем получит это в массив, который в конечном итоге перейдет к returnVal
.
Теперь давайте рассмотрим returnVal
.Он в формате JSON (правильный), и когда вы представите его как JSON, он покажет вам:
image:"Qk1W/QAAAAAAADYAAAAoAAAAawAAAMgAAAABABgAAAAAACD9AADEDgAAxA4AAAAAAAAAAAAA////////////////////////////////////7+/...."
Однако!когда вы визуализируете его как текст, он покажет вам:
"image":"Qk1W\/QAAAAAAADYAAAAoAAAAawAAAMgAAAABABgAAAAAACD9AADEDgAAxA4AAAAAAAAAAAAA\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/7+\/..."
Вы видели?он вставляет \
перед каждым /
, и это имеет большое значение.
Итак, мои вопросы:
- Зачем визуализировать его как JSON, а визуализировать как текст показывает разные вещи?
- Как я могу получить после сериализации правильное значение (без
/
с)
РЕДАКТИРОВАТЬ:
Хотя можно сказать, что \/
и /
одинаковы, последствия не являются.Позже при использовании этого JSON для выброса его в Web Api с использованием
byte[] bytes = Encoding.UTF8.GetBytes(json);
ByteArrayContent byteContent = new ByteArrayContent(bytes);
byteContent.Headers.ContentType = new MediaTypeWithQualityHeaderValue(content);
версия с добавленным \
приводит к bytes
с 115442 байтами, в то время как версия, которая использует только /
, приводит к bytes
из 86535 байт.Поэтому результаты совершенно разные.
Итак, как я могу получить результат без добавления \
с?