Рейтинг:
8
Richard Deeming
Основываясь на коде в комментариях к решению 1, у вас есть формат JSON[^] строка, содержащая В base64[^] закодированный XML-файл.
Вам понадобится библиотека синтаксического анализа JSON - я использую JSON.NET[^].
Затем вам понадобится класс для представления объекта JSON. Это не совсем ясно, так как некоторые свойства null
или пустые массивы. Но что-то вроде этого должно помочь вам начать:
Class InfoRecord
Public Property uuid As Guid
Public Property fechaCancelacion As DateTime
Public Property estatus As Integer
Public Property descripcion As String
Public Property selloCFD As String
Public Property tipoTimbre As String
Public Property rfcEmisor As String
End Class
Class ErrorRecord
Public Property codigo As Integer
Public Property descripcion As String
Public Property html As String
End Class
Class Wrapper
Public Property [error] As ErrorRecord
Public Property uuid As Guid
Public Property timbresRestantes As String
Public Property xml As String
Public Property info As List(Of InfoRecord)
Public ReadOnly Property XmlDocument As XDocument
Get
If String.IsNullOrEmpty(xml) Then Return Nothing
Dim xmlBytes As Byte() = Convert.FromBase64String(xml)
Dim decodedXml As String = System.Text.Encoding.Default.GetString(xmlBytes)
Return XDocument.Parse(decodedXml)
End Get
End Property
End Class
Добавьте ссылку NuGet к JSON.NET, и импортировать
Newtonsoft.Json
пространство имен. Затем вы можете преобразовать свою строку в экземпляр
Wrapper
класс и доступ к XML-документу:
Dim data As Wrapper = JsonConvert.DeserializeObject(Of Wraper)(yourStringVariable)
Dim xml As XDocument = data.XmlDocument
If xml IsNot Nothing Then
... Do something with the XML here ...
End If
Miguel Altamirano Morales
Большое спасибо Ричард;
Чтобы сэкономить время, я исключил элементы "uuid", "xml" и "fechaTimbrado" из строкового ответа,который у меня есть (с помощью функции "Instr" VB), использовал System.Text.Asccii.decoding для декодирования xml-кода:
strXml = новая система.Text.ASCIIEncoding().GetString(Convert.FromBase64String(strWork_Xml))
Затем я конвертирую его в XML-файл, и он кажется правильным, так как я могу видеть его через Интернет.
У вас такой интересный ответ; Во всяком случае, мне потребуется некоторое время, чтобы изучить его глубже.
Я рад снова связаться с вами.
Рейтинг:
13
Afzaal Ahmad Zeeshan
Ваш вопрос касается расшифровки или лучшего способа извлечения содержимого из строки? Я буду следить за вопросами в вашем посте и постараюсь ответить на них,
Цитата:
Мне нужно расшифровать XML
У вас есть пароль или ключ для расшифровки сообщения? Если нет, то вопрос заканчивается здесь, потому что нет никакого разумного способа получить данные и значения обратно из зашифрованного сообщения.
Если да, то проверьте, какой метод шифрования был использован —
чтобы гики были довольны, какой алгоритм шифрования был использован Затем вы можете использовать VB.NET варианты криптографических помощников для расшифровки сообщения.
Взгляните на образцы здесь в документации Microsoft,
Шифрование и дешифрование строк в Visual Basic | Microsoft Docs[
^]
Цитата:
Можно ли зарегистрировать информацию о строковой переменной в наборе данных, а затем взять ее оттуда ??. Или любое другое предложение ??.
Если эти данные похожи на пару ключ-значение, то да, вы можете хранить их в формате, который найдете полезным —
HashSet
может быть, для лучшей производительности? Но эта часть придет после того, как вы расшифруете текст. Кроме того, это будет возможно, если данные из REST API структурированы, как JSON, то вы можете сразу же разобрать их в объект и использовать. Попробуйте быть немного более конкретным в этой части вашего вопроса.
Miguel Altamirano Morales
Большое вам спасибо за ваш ответ, Афзаал; я постараюсь прояснить свой вопрос:
- Что я знаю о методе шифрования, так это то, что это Base64 (я не знаю, как это сказать по-английски). Это единственная ссылка, которая у меня есть.
- Я поймал ответ веб-службы в переменной строкового типа, и да, его содержимое находится в паре ключ-значение.
Я попытался использовать функцию ReadxML, используя строковую переменную в качестве параметра, чтобы поместить данные в набор данных, это было легко для меня в прошлом, но она рассматривала его как путь к адресу, поэтому это не сработало.
Это содержимое моей строковой переменной (я удалил чувствительные части, надеюсь, вы понимаете, и я надеюсь, что это может быть полезно).
{" &амп; vbLf &ампер; " ""ошибки"" : {" &амп; vbLf &ампер; " ""код"" : 0," &амп; vbLf &ампер; " ""descripcion"" : ""ОК""," &амп; vbLf &ампер; " ""ошибок"" : [ ]," &амп; vbLf &ампер; " ""HTML-код"" : ""0 OK""" & vbLf & " }," & vbLf & " ""uuid"" : ""8e1232b1-8b7d-45bc-b7c8-571970e93302""," & vbLf & " ""timbresRestantes"" : 0," & vbLf & " ""xml"" : ""PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48Q2FuY2VsYUNGRFJlc3BvbnNlIHhtbG5zPSJodHRwOi8vY2FuY2VsYWNmZC5zYXQuZ29iLm14Ij48Q2FuY2VsYUNGRFJlc3VsdCBGZWNoYT0iMjAxOC0wNi0yOFQwOTozNzo1OSIgUmZjRW1pc29yPSJNQUw3NDA0MjM0SzciPjxGb2xpb3M+PFVVSUQ+NjdFRkUwNDctQjg2Qi00QUExLThDMjQtODcxQ0EyNkE1NUY3PC9VVUlEPjxFc3RhdHVzVVVJRD4yMDE8L0VzdGF0dXNVVUlEPjwvRm9saW9zPjxTaWduYXR1cmUgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyMiIElkPSJTZWxsb1NBVCI+PFNpZ25lZEluZm8+PENhbm9uaWNhbGl6YXRpb25NZXRob2QgQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAxL1JFQy14bWwtYzE0bi0yMDAxMDMxNSIvPjxTaWduYXR1cmVNZXRob2QgQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTUxMiIvPjxSZWZlcmVuY2UgVVJJPSIiP
jxUcmFuc2Zvcm1zPjxUcmFuc2Zvcm0gQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy9UUi8xOTk5L1JFQy14cGF0aC0xOTk5MTExNiI+PFhQYXRoPm5vdChhbmNlc3Rvci1vci1zZWxmOjoqW2xvY2FsLW5hbWUoKT0nU2lnbmF0dXJlJ10pPC9YUGF0aD48L1RyYW5zZm9ybT48L1RyYW5zZm9ybXM+PERpZ2VzdE1ldGhvZCBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jI3NoYTUxMiIvPjxEaWdlc3RWYWx1ZT4vQlJCTzVWZmx6OU40NVJScmZYemV6QTF5SDBSbHV6UldLL0FoSEx0cHRzVW5jVjhSNnlnbGUwZ0lteXFQdnl2blNJdXRmTkI4Q1c3RU9jd3RlaUEzdz09PC9EaWdlc3RWYWx1ZT48L1JlZmVyZW5jZT48L1NpZ25lZEluZm8+PFNpZ25hdHVyZVZhbHVlPlQ1YXR4TFF2V2JGaVBSSFl5a0YwcUxtWHlscXZMcW1GZEdNZGZnakpnY05sVWRBbFNRVElxS2VhQXQ2ek9ZZGVDLzYzNUNQT3hJMS9RZndJdFlTMExRPT08L1NpZ25hdHVyZVZhbHVlPjxLZXlJbmZvPjxLZXlOYW1lPjAwMDAxMDg4ODg4ODAwMDAwMDE2PC9LZXlOYW1lPjxLZXlWYWx1ZT48UlNBS2V5VmFsdWU+PE1vZHVsdXM+eG5MMnpEUHRINWpEc0FaRFRJZk1xYktHcnZlK0F0OEt5eDJFWnZiZlhicEs5dVZFeFdTODc0b01lbEZ6TnE2OS9ZcVNSZVQzSTdJOHdyK2pveTVPN291WkgrNEtXZElHcDRTaTZsSGUwa250eHpObXV1S3lPUGtKOXRNY250bkZtUTRiZnhGeGxnL1VkMmhDdHVveTNqMnhZa0lYdTVPNHBHTTk4Tno4cEFNPTwvTW9kdWx1cz48RXhwb25lbn
Q+QVFBQjwvRXhwb25lbnQ+PC9SU0FLZXlWYWx1ZT48L0tleVZhbHVlPjwvS2V5SW5mbz48L1NpZ25hdHVyZT48L0NhbmNlbGFDRkRSZXN1bHQ+PC9DYW5jZWxhQ0ZEUmVzcG9uc2U+""," & vbLf & " ""info"" : [ {" & vbLf & " ""uuid"" : ""67EFE047-B86B-4AA1-8C24-871CA26A55F7""," & vbLf & " ""fechaCancelacion"" : ""2018-06-28T09:37:59""," & vbLf & " ""estatus"" : 201," & vbLf & " ""descripcion"" : ""UUID Cancelado exitosamente""," & vbLf & " ""selloCFD"" : ""T5atxLQvWbFiPRHYykF0qLmXylqvLqmFdGMdfgjJgcNlUdAlSQTIqKeaAt6zOYdeC/635CPOxI1/QfwItYS0LQ==""," & vbLf & " ""tipoTimbre"" : ""CFDI""," & vbLf & " ""total"" : null," & vbLf & " ""serie"" : null," & vbLf & " ""folio"" : null," & vbLf & " ""rfcEmisor"" : ""XXXXXXXXXXXX""" & vbLf & " } ]" & vbLf & "}"
>
Спасибо еще раз.
Richard Deeming
Этот XML-код не зашифрован; он закодирован на базе 64.
Miguel Altamirano Morales
Спасибо, Ричард, прости за мою ошибку. Это первый раз, когда мне приходится иметь дело с такими вещами.
Richard Deeming
Не нужно извиняться. Только по долгому опыту я определил кодировку Base64. :)
Miguel Altamirano Morales
Замечательно !!. Я сохраню твой ответ, все, что ты мне сказал, мне действительно нужно знать такие вещи.
Patrice T
Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.
Чтобы каждый мог обратить внимание на эту информацию.
Patrice T
Привет Мигель,
То, что вы вкладываете в свой вопрос, привлекает гораздо больше внимания, чем другие комментарии.
Поэтому, если вы включите свое объяснение и код в вопрос, это прояснит вопрос и привлечет больше внимания со стороны помощников.
Это повысит ваши шансы получить полезные ответы
Miguel Altamirano Morales
Я полагаю, вы говорите мне это относительно будущих вопросов, не так ли?, потому что на этот вопрос уже дан ответ. Или вы хотите, чтобы я немного прояснил это ?
И да, я постараюсь прояснить свои дальнейшие вопросы. Спасибо за ваше наблюдение Ppolymorphe.
Patrice T
Если на ваш вопрос будет дан ответ, просто сохраните это для будущих вопросов
Miguel Altamirano Morales
Большое тебе спасибо Амиго