Десериализация строки C ++ в сервисе WCF с использованием конвертера Json - PullRequest
0 голосов
/ 29 июня 2018

Я пытаюсь связаться со службой 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 ++, это выглядит как

"{\" Изображение \ ": ÉGÉìÉRÅ [ÉfÉBÉ ......... data}"

поэтому здесь я получаю сообщение об ошибке при десериализации данных json с использованием

InputData requestData = JsonConvert.DeserializeObject<InputData>(jsonData);

почему я не могу десериализовать данные обратно к объекту здесь, когда запрос приходит из c ++?

Не могли бы вы посоветовать мне способ отправить эти данные изображения в виде строки в службу wcf в C ++, где служба может успешно десериализовать данные обратно в объект.

есть ли способ, которым я могу преобразовать свои данные изображения примерно так [92,34,92,34, ........] в C ++, чтобы этот сервер мог десериализовать данные должным образом (я могу неправильно).

Спасибо заранее.

1 Ответ

0 голосов
/ 30 июня 2018

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

...