1

我不知道如何将 Json 输入转换为 ac# 模型。

这是我的控制器获得的 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; }
}

然后是我的“处理器模型”

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;
}

到目前为止,我可以获得所有的namevalue。我还可以检索第一个ProcessorName,但不能检索它的参数,也不能检索其他ProcessorNames

4

5 回答 5

4

当您在 JSON 到 Class 的转换中遇到困难时,它只是一个有用的工具。

http://json2csharp.com/

这对于赢得时间非常有用。因为我过去在调试 JSON 反序列化上花了很多不必要的时间。

于 2013-09-26T09:53:20.563 回答
1

我认为您不需要 ProcessorModel。

你的映射类应该只包含:

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

代替

  public List<ProcessorModel> Processors { get; set; }
于 2013-09-26T09:44:20.540 回答
1

{"ParameterName":"toto"}在您的json(字符串)中定义为字符串,在POCO中您将其定义public List<string> ParameterName;为json字符串{"ParameterName":["toto"]}

于 2013-09-26T09:51:05.347 回答
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"
        }]},
}]

}]

于 2013-09-26T09:56:01.750 回答
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;
        }
    }
于 2013-09-26T09:58:07.227 回答