Десериализация строки C ++ в сервисе WCF с использованием конвертера Json

Я пытаюсь связаться со службой 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 ++, чтобы этот сервер мог десериализовать данные должным образом (я могу ошибаться).

Заранее спасибо.

0

Решение

использование 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 вместо байтового массива.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]