Я пытаюсь связаться со службой C # wcf, которая принимает josn в качестве входных данных, где json содержит данные изображения, я написал клиент C #, где я преобразую объект (InputData), содержащий изображение в виде байта [], в json и отправляю его на сервер.
Client side:
InputData RequestData; //copied image data into RequestData obj
String jsonRequest = (new JavaScriptSerializer()).Serialize(RequestData); //converting obj to json
where :
public class InputData
{
private byte[] RawImage = null;
public byte[] FrontImage
{
get return this.FrontRawImage;
set if (null != value) { FrontRawImage = value.ToArray(); }
}
}Server side:
//deserialize and get the object
InputData requestData = JsonConvert.DeserializeObject<InputData>(jsonData);
Я могу сделать это с клиентом C #, но проблема в том, что мне нужно сообщить эту службу WCF из клиента C ++, где я преобразую данные изображения (jpg) в строку ** (utf-8) **, а затем создаю json и отправляю это к службе, но на стороне сервера я не могу десериализовать этот json в объект InputData (возвращая ноль с исключением неожиданных символов).
// Я получаю исключение на стороне сервера, которое говорит «неожиданный символ в запрашиваемых данных» InputData requestData = JsonConvert.DeserializeObject (jsonData);
Я отлаживаю на стороне сервера =>
JSON-запрос данных от клиента C # выглядит
«{\» Изображение \ «: [92,34,92,34,36,73, 56 ……. огромные данные об изображении здесь]}»
где [92,34,92,34,36,73, 56 ……. огромные данные изображения здесь] — это фактические данные изображения в формате json.
но когда я посылаю те же данные запроса из C ++, это выглядит так
«{\» Image \ «: ÉGÉìÉRÅ [ÉfÉBÉ ……… data}»
поэтому здесь я получаю сообщение об ошибке при десериализации данных JSON с помощью
InputData requestData = JsonConvert.DeserializeObject<InputData>(jsonData);
Почему я не могу десериализовать данные обратно к объекту здесь, когда запрос приходит из C ++?
Не могли бы вы посоветовать мне способ отправить эти данные изображения в виде строки в службу wcf на C ++, где служба может успешно десериализовать данные обратно в объект.
Есть ли способ, которым я могу преобразовать свои данные изображения примерно так [92,34,92,34, ……..] в C ++, чтобы этот сервер мог десериализовать данные должным образом (я могу ошибаться).
Заранее спасибо.
использование wcf DataContract
для того, чтобы сериализовать. но вы пытались сериализовать ввод с newtonsoft
, если вы хотите сериализовать ввод, вы можете использовать этот метод:
public static string ToJSON<T>(this T obj) where T : class
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T));
using (MemoryStream stream = new MemoryStream())
{
serializer.WriteObject(stream, obj);
return Encoding.Default.GetString(stream.ToArray());
}
}
Я настоятельно рекомендую во избежание подобных проблем использовать base64 вместо байтового массива.
Других решений пока нет …