json сериализация и десериализация с приложением xamarin не работают должным образом - PullRequest
0 голосов
/ 03 августа 2020

Я пытаюсь выполнить сериализацию и десериализацию, но почему-то он не работает с приложением xamarin так же, как с консольным приложением, быстрый пример с использованием этой строки json и настраиваемой оболочки

    public class JsonWrapper
{
    public string ObjType { get; set; }
    public object Obj { get; set; }
}

и это json прямая строка, которая должна быть ясной

            var json =
            "{\"ObjType\":\"System.Exception\",\"Obj\":{\"ClassName\":\"System.Exception\",\"Message\":\"Printer Is Not Connected\",\"Data\":null,\"InnerException\":null,\"HelpURL\":null,\"StackTraceString\":null,\"RemoteStackTraceString\":null,\"RemoteStackIndex\":0,\"ExceptionMethod\":null,\"HResult\":-2146233088,\"Source\":null,\"WatsonBuckets\":null}}\r\n";
        var obj= JsonConvert.DeserializeObject<JsonWrapper>(json);

        var type = Type.GetType(obj.ObjType);
        var obj2 = JsonConvert.DeserializeObject(JsonConvert.SerializeObject(obj.Obj), type);
        var message = (obj2 as Exception).Message;

она получит переменную сообщения с отсутствующей информацией, я имею в виду, что не получит сообщение, что принтер не подключен, то же самое код работает нормально с консольным приложением, так что не знаю, может ли кто-нибудь помочь?

Ответы [ 3 ]

0 голосов
/ 03 августа 2020

Мне не удалось воспроизвести вашу проблему. Я получил те же результаты, что и TheGeneral.

Возможно, вы могли бы настроить Type для своих Obj данных в качестве временного решения.

например:

publcic class JsonWrapper
    {
        public string ObjType { get; set; }
        public Bean Obj { get; set; }

        public class Bean
        {
            public string ClassName { get; set; }
            public string Message { get; set; }
            public string Data { get; set; }
            public string InnerException { get; set; }
             ...
        }
    }

, тогда вы можете получить сообщение:

 var json = "{\"ObjType\":\"System.Exception\",\"Obj\":{\"ClassName\":\"System.Exception\",\"Message\":\"Printer Is Not Connected\",\"Data\":null,\"InnerException\":null,\"HelpURL\":null,\"StackTraceString\":null,\"RemoteStackTraceString\":null,\"RemoteStackIndex\":0,\"ExceptionMethod\":null,\"HResult\":-2146233088,\"Source\":null,\"WatsonBuckets\":null}}\r\n";
 var obj = JsonConvert.DeserializeObject<JsonWrapper>(json);
 var obj2 = obj.Obj;
 var message = obj2.Message;
0 голосов
/ 03 августа 2020

моя проблема в том, что я не получаю тот же экземпляр после десериализации строки Json не уверен, почему введите описание изображения здесь

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

0 голосов
/ 03 августа 2020

Я только что запустил ваш точно такой же код на Xamarin Android, скомпилированном с использованием Level 29, 10.0 (Q) SDK в Main Activity , и это работал нормально

Снимки экрана

enter image description here


enter image description here


введите описание изображения здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...