2014-09-12 2 views
2

На данный момент я использую VB.Net. Я строю свою строку, вывешиваю ее, а затем разбираю результаты.Анализ в Json не в XML. VB.Net

Синтаксического Пример XML

Dim xml As New MWXMLDocument() 
      Dim sReason As String = "Unknown" 

      Try 
       xml.LoadXml(sresult) 
       If xml.SelectSimpleNode("AcceptedLead").InnerText = "true" Then 
        app.Outcome.RedirectURL = xml.SelectSimpleNode("result/redirecturl").InnerText 

        AcceptLead() 
        Return True 
       End If 

       sReason = xml.SelectSimpleNode("Reason").InnerText 
      Catch ex As Exception 
       sReason = "Error: " & ex.Message 
      End Try 
      DeclineLead(sReason) 
      Return False 
     End Function 

Как я анализирую результат отправляется обратно в JSON, вот пример результата я хочу разобрать при помощи VB: Могу ли я не просто получить данные из string и parse как обычный XML.

{"RedirectUrl":"www.test.com","Commission":5.0000,"Status":"accepted"} 
+1

возможно дубликат [Как разобрать JSON в C#?] (Http://stackoverflow.com/questions/6620165/how-to-parse-json-in-c) – Neolisk

+0

Также загляните в [System.Runtime.Serialization.Json] (http://msdn.microsoft.com/en-us/library/system.runtime.serialization.json (v = vs.110) .aspx). – Neolisk

ответ

0

Полный Ответ

sResult = sResult.Replace("""", String.Empty) 
      If sResult.Contains("Status:accepted") Then 
       Dim parts = sResult.Replace("{", String.Empty).Replace("}", String.Empty).Split(",") 
       For i As Int16 = 0 To parts.Length - 1 
        If parts(i).StartsWith("RedirectUrl") Then 
         app.Outcome.RedirectURL = parts(i).Substring(12) 
        End If 
        If parts(i).StartsWith("Commission") Then 
         lendertier.LenderComm = CDec(parts(i).Substring(11)) 
        End If 
        If parts(i).StartsWith("ApplicationRef") Then 
         app.Outcome.LenderReference = parts(i).Substring(15) 
        End If 
       Next 
       AcceptLead() 
       Return True 
      End If 
      If sResult.Contains("Reason:Duplicate") Then 
       sReason = "Duplicate" 
      ElseIf sResult.Contains("{Error:invalid credentials") Then 
       sReason = "Error: Invalid credentials" 
      ElseIf sResult.Contains("ValidationErrors:") Then 
       sReason = "Invalid call:" + sResult.Replace("ValidationErrors:", String.Empty).Replace(",Status:rejected", String.Empty) 
      Else 
       sReason = "Rejected" 
      End If 
      DeclineLead(sReason) 
      Return False 
2

Вы можете использовать пример JSON.NET Library

в C#:

var result = JsonConvert.DeserializeObject<RootObject>(string json);

RootObject должен быть свой собственный класс.

1

Вы можете использовать .Net построен в JavaScriptSerialiser

Сначала добавьте ссылку на System.Web.Extensions, а затем

Imports System.Web.Script.Serialization 

Вслед за ...

Dim sExampleJSON As String = "{""RedirectUrl"":""www.test.com"",""Commission"":5.0000,""Status"":""accepted""}" 

Dim MySerializer As JavaScriptSerializer = New JavaScriptSerializer() 
Dim MyDictionary As Dictionary(Of String, Object) = MySerializer.Deserialize(Of Dictionary(Of String, Object))(sExampleJSON) 

If MyDictionary.ContainsKey("RedirectUrl") Then 
    Console.WriteLine(MyDictionary("RedirectUrl")) 
End If 
+0

Что делать, если значение строки sExampleJSON изменяется, я просто добавил это в качестве примера. – Trifactor

+0

Ну, тогда ты просто снова десериализуешь это. Затем MyDictionary будет содержать новые десериализованные результаты JSON. –

+0

Можете ли вы привести пример, пожалуйста, – Trifactor

1

в Global.asax.cs

using System.Data.Entity; 

    namespace RpManticSolAPI 
    { 
    public class WebApiApplication : System.Web.HttpApplication 
    { 
    protected void Application_Start() 
    { 
      GlobalConfiguration.Configure(WebApiConfig.Register); 
      GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore; 
      GlobalConfiguration.Configuration.Formatters.Remove(GlobalConfiguration.Configuration.Formatters.XmlFormatter);   
     } 
    } 
    }