Какой из следующих подходов лучше подходит для кодирования и почему?
Я написал три подхода,
HTTP-запрос POST
Вариант А - ASCII
let request = WebRequest.Create(url) :?> HttpWebRequest
request.Method <- "POST"
request.ContentType <- "application/json;charset=UTF-8"
use memoryStream = new MemoryStream()
(new DataContractJsonSerializer(typeof<Article>)).WriteObject(memoryStream, schema)
// option A
let str = Encoding.Default.GetString(memoryStream.ToArray()) // using ASCII
let data : byte[] = Text.Encoding.ASCII.GetBytes(str);
request.ContentLength <- (int64)data.Length
use requestStream = request.GetRequestStream()
requestStream.Write(data, 0, data.Length)
requestStream.Flush()
requestStream.Close()
Вариант B - UTF-8
let request = WebRequest.Create(url) :?> HttpWebRequest
request.Method <- "POST"
request.ContentType <- "application/json;charset=UTF-8"
use memoryStream = new MemoryStream()
(new DataContractJsonSerializer(typeof<Article>)).WriteObject(memoryStream, schema)
// option B
let s = Encoding.UTF8.GetString(memoryStream.ToArray()) // using UTF-8
let data : byte[] = Encoding.UTF8.GetBytes(d);
request.ContentLength <- (int64)data.Length
use requestStream = request.GetRequestStream()
requestStream.Write(data, 0, data.Length)
requestStream.Flush()
requestStream.Close()
Вариант C- прямой поток памяти
let request = WebRequest.Create(url) :?> HttpWebRequest
request.Method <- "POST"
request.ContentType <- "application/json;charset=UTF-8"
use memoryStream = new MemoryStream()
(new DataContractJsonSerializer(typeof<Article>)).WriteObject(memoryStream, schema)
// option C direct memory stream to array
let data : byte[] = memoryStream.ToArray()
request.ContentLength <- (int64)data.Length
use requestStream = request.GetRequestStream()
requestStream.Write(data, 0, data.Length)
requestStream.Flush()
requestStream.Close()
непонятно, что использует api, я думаю, что utf-8
спасает, но что вы думаете о прямом memoryStream.ToArray()
, каких-либо сложностях с этим?
Этот вопрос слишком расплывчатый, чтобы на него можно было ответить. Какой тип данных вы ожидаете декодировать? Если это двоичный двоичный объект, то лучше всего подходит вариант byte[]
. Если это JSON, как вы упомянули в заголовке вопроса, но нигде больше, тогда вам следует использовать UTF-8 (и тогда я не знаю, зачем вам let data = Encoding.UTF8.GetBytes(s)
- нужны ли вам байты позже?). В вашем вопросе недостаточно информации, чтобы дать хороший ответ.
У меня есть запись на F# с полями и значениями, и я хочу отправить ее как JSON на удаленный сервер. Какой вариант использовать? Я делаю вызов API, как бы вы преобразовали запись в json и отправили на сервер с помощью DataContractJsonSerializer
? Что правильно? Это HTTP-запрос, надеюсь, это поможет, спросите больше, если не понятно.
Похоже, вы делаете это тяжело. Вы рассматривали FSharp.Data? fsharp.github.io/FSharp.Data/library/Http.html
Привет, Александра, да, я знаю и использовал библиотеку, но мне нравится трудный путь :) Я не уверен, почему так сложно выбрать из вариантов A, B и C для сериализации объекта, на самом деле все 3 работают, но интересно, как правильно, мне делать memoryStream.ToArray()
, не проходя процесс кодирования или нет?
Привет, ребята, я немного отредактировал, не могли бы вы повторить, есть ли проблема, если я подойду с помощью любого из вариантов? это скорее вопрос для варианта C, есть ли с этим какие-то проблемы?
Выбор кодировки зависит от того, как данные были сериализованы. Например, если сериализатор использует ASCII, то десериализатор должен