2015-02-19 9 views
1

У меня проблема с кодом JSON для XML. Он не присваивает значения объекту, и я не могу понять, почему. Пожалуйста, дайте мне знать, что я делаю неправильно.JSON Convert Deserialize Object

Мой C# код:

using Newtonsoft.Json; 
using System.Xml; 

namespace JSONTest 
{ 
    public class Program 
    { 
     static void Main(string[] args) 
     { 
      string fileName = "C:\\Code\\JSONTest\\data\\response.xml"; 

      // Convert XML Data into JSON Data 
      XmlDocument xmlFile = new XmlDocument(); 
      xmlFile.Load(fileName); 
      string jsonData = JsonConvert.SerializeXmlNode(xmlFile); 

      // Convert JSON Data into Object 
      RootObject root = JsonConvert.DeserializeObject<RootObject>(jsonData); 
      var data = root.RESPONSE_GROUP; 
      Console.ReadLine(); 
     } 
    } 

     public class RootObject 
     { 
      public RESPONSEGROUP RESPONSE_GROUP { get; set; } 
     } 

     public class RESPONSEGROUP 
     { 
      public string MISMOVersionID { get; set; } 
      public object RESPONDING_PARTY { get; set; } 
      public object RESPOND_TO_PARTY { get; set; } 
      public RESPONSE RESPONSE { get; set; } 
     } 

     public class RESPONSE 
     { 
      public string ResponseDateTime { get; set; } 
      public KEY KEY { get; set; } 
      public STATUS STATUS { get; set; } 
     } 

     public class KEY 
     { 
      public string _Name { get; set; } 
      public string _Value { get; set; } 
     } 

     public class STATUS 
     { 
      public string _Code { get; set; } 
      public string _Condition { get; set; } 
      public string _Description { get; set; } 
      public string _Name { get; set; } 
     } 
} 

XML

<RESPONSE_GROUP MISMOVersionID="2.4"> 
    <RESPONDING_PARTY/> 
    <RESPOND_TO_PARTY/> 
    <RESPONSE ResponseDateTime="2015-02-19T10:32:11-06:00"> 
     <KEY _Name="LOSClientID" _Value="3000799866"/> 
     <STATUS _Code="S0010" _Condition="Success" _Description="TEST DESC" _Name="Complete"/> 
    </RESPONSE> 
</RESPONSE_GROUP> 

Мой "JSONData" строка:

{"RESPONSE_GROUP":{"@MISMOVersionID":"2.4","RESPONDING_PARTY":null,"RESPOND_TO_PARTY":null,"RESPONSE":{"@ResponseDateTime":"2015-02-19T10:32:11-06:00","KEY":{"@_Name":"LOSClientID","@_Value":"3000799866"},"STATUS":{"@_Code":"S0010","@_Condition":"Success","@_Description":"THIS IS THE DESCRIPTION.","@_Name":"Complete"}}}} 

Значение: root.RESPONSE_GROUP.MISMOVersionID является NULL, а также любые другие ценности, которые должен был быть заселен. Я знаю, что здесь что-то не так, но я не могу понять, что это такое.

Пожалуйста, помогите! Заранее спасибо.

+1

Поскольку существует два уровня конверсии здесь, вы, вероятно, также придется поставить XML для нас, чтобы помочь. –

+0

Ваш JSON имеет свойство, называемое '@ MISMOVersionID'. Ваше фактическое свойство - 'MISMOVersionID'. (Ditto для ResponseDateTime, _Name и т. Д.) Я не уверен, что я бы * ожидал, что это сработает ... –

+0

@CharlieKilian - Данные JSON, которые я предоставил, равны 'jsonData'. Однако я предоставил XML, так как вы его запросили. – Turp

ответ

3

Проблема заключается в том, что ваш JSON содержит знаки @ перед некоторыми именами свойств. Например:

"@MISMOVersionID":"2.4" 

Есть два варианта здесь:

  • Закрепить JSON в не есть что, например, "@MISMOVersionID":"2.4"
  • Используйте JsonPropertyAttribute, чтобы указать Json.NET, какое имя свойства следует ожидать в JSON, например.

    [JsonProperty("@MISMOVersionID")] 
    public string MISMOVersionID { get; set; } 
    
+0

Это было решение! Спасибо, Джон! – Turp