2013-09-26 128 views
1

我想不通,如何將Json輸入轉換爲c#模型。序列化Json到模型

這裏是JSON的一個例子我控制器獲取:

[{"name":"StartDate", 
    "value":"0", 
    "Processors":[[{"processor":{"ProcessorName":"searchAndReplace","ProcessorParameters":[{"ParameterName":"toto"},{"ParameterName":"taa"}]}}, 
        {"processor":{"ProcessorName":"searchAndReplace","ProcessorParameters":[{"ParameterName":"toto"},{"ParameterName":"tuuut"}]}}]]}, 
    {"name":"EndDate","value":"1","Processors":[[]]}, 
    {"name":"Country","value":"2","Processors":[[]]}] 

這裏是我的控制器的簽名:

public JsonResult SendMapping(List<Mapping> MyMappings) 

這是我的班 「映射」:

public class Mapping 
{ 
    public string Value { get; set; } 
    public string Name { get; set; } 
    public List<Processor> Processors { get; set; } 
} 

然後我的「ProcessorModel」

public enum ProcessorNames { SearchAndReplace } 

public class ProcessorModel 
{ 
    public Processor processor; 
} 

public class Processor 
{ 
    public ProcessorNames ProcessorName; 
    public List<Parameter> ProcessorParameters; 
} 

public class Parameter 
{ 
    public List<string> ParameterName; 
} 

到目前爲止,我可以得到所有的。我也可以檢索第一ProcessorName,而不是它的參數,也沒有其他ProcessorNames

回答

3

當您與JSON轉換爲類時,只是一個有用的工具。

http://json2csharp.com/

這是非常有用的贏得了時間。因爲我過去花了很多不必要的時間來調試JSON反序列化。

+0

我的Json錯了,你的工具幫助我理解它。 Thx –

1

我不認爲你需要的ProcessorModel。

你映射類應該只包含:

public List<Processor> Processors { get; set; } 

,而不是

public List<ProcessorModel> Processors { get; set; } 
+0

它有點幫助,但不是那麼多。事實上,使用我提供的代碼,我無法讀取第一個ProcessorName。隨着你的改變,我又能夠了,但是我無法得到剩下的數據 –

1

{"ParameterName":"toto"}在你的JSON(串)爲一個字符串,在POCO是指你擁有了它作爲public List<string> ParameterName; json字符串應該是{"ParameterName":["toto"]}

1

我也不認爲你的JSON是完全正確的。

應該

[{ 
"name": "StartDate", 
"value": "0", 
"Processors": [{ 
    "processor": {"ProcessorName": "searchAndReplace", 
    "ProcessorParameters": [{ 
      "ParameterName": "toto" 
     }, 
     { 
      "ParameterName": "taa" 
     }]},   
    "processor": {"ProcessorName": "searchAndReplace", 
    "ProcessorParameters": [{ 
      "ParameterName": "toto" 
     }, 
     { 
      "ParameterName": "taa" 
     }]}, 
}, 
{ 
    "processor": {"ProcessorName": "searchAndReplace", 
    "ProcessorParameters": [{ 
      "ParameterName": "toto" 
     }, 
     { 
      "ParameterName": "taa" 
     }]},   
    "processor": {"ProcessorName": "searchAndReplace", 
    "ProcessorParameters": [{ 
      "ParameterName": "toto" 
     }, 
     { 
      "ParameterName": "taa" 
     }]}, 
}] 

}]

+0

你說得對,這是我沒有很好創建的Json。我編輯了你的答案並接受了它 –

1

在我看來,有一個在你的JSON小寫和大寫的屬性名稱相關的一些問題。屬性/鍵名必須與在類中定義的大小寫相同。請糾正並使用下面的課程進行序列化或淡化。

public class JsonHelper 
    { 
     /// <summary> 
     /// JSON Serialization 
     /// </summary> 
     public static string JsonSerializer<T>(T t) 
     { 
      var ser = new DataContractJsonSerializer(typeof(T)); 
      var ms = new MemoryStream(); 
      ser.WriteObject(ms, t); 
      string jsonString = Encoding.UTF8.GetString(ms.ToArray()); 
      ms.Close(); 
      return jsonString; 
     } 
     /// <summary> 
     /// JSON Deserialization 
     /// </summary> 
     public static T JsonDeserialize<T>(string jsonString) 
     { 
      var ser = new DataContractJsonSerializer(typeof(T)); 
      var ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString)); 
      T obj = (T)ser.ReadObject(ms); 
      return obj; 
     } 
    }