RESTFUL服务和JSON阵列



我有一个.net core 1.x Web API项目,我试图接受HTTP帖子上的数组,但是我无法使此工作工作。我已经验证了以下JSON

    {
    "LogEntry": [{
        "a": 1238976,
        "b": "test",
        "c": "sub test",
        "d": "some syb system comp",
        "e": 1234,
        "f": "my category",
        "g": "my event name",
        "h": "my sub event",
        "i": "user def 1",
        "j": "7/22/2008 12:11:04 PM",
        "k": 45,
        "l": 65,
        "n": "Chris",
        "o": "C:\temp\",
        "p": 1234567890,
        "q": 84,
        "r": "eeeee stuff",
        "s": "ddddd stuff",
        "t": 90210
    }]
}

我有一个模型类,因此我需要每个数组项目都可以添加到模型类型列表中。这就是我被困的地方。我只能在不在数组中的单个条目中进行此操作。我的C#是:

    [HttpPost]
    public string Post([FromBody] JObject test)
    {
     var result = JsonConvert.DeserializeObject<EventManagerLogEntry>(test.ToString());
        return "wootwoot";
    }

关于我如何循环循环的任何方向,并将其添加到类型列表中都将非常有帮助。

类定义

public class EventManagerLogEntry
    {
        public int a { get; set; }
        public string b { get; set; }
        public string c { get; set; }
        public string d { get; set; }
        public int e { get; set; }
        public string f { get; set; }
        public string g { get; set; }
        public string h { get; set; }
        public string i { get; set; }
        public string j { get; set; }
        public int k { get; set; }            
        public int l { get; set; }
        public string m { get; set; }
        public string n { get; set; }            
        public int o { get; set; }
        public int p { get; set; }
        public string q { get; set; }
        public string r { get; set; }          
        public int s { get; set; }
    }

更新我尝试了几种不同的方法,这似乎对我有用。

    [HttpPost]
    public HttpResponseMessage Post([FromBody] JArray test)
    {
        var list = JsonConvert.DeserializeObject<List<EventManagerLogEntry>>(test.ToString());

        foreach (EventManagerLogEntry x in list)
        {
            //_context.EventManagerLogEntry.Attach(x);
            //_context.SaveChanges();
        }
        return new HttpResponseMessage(System.Net.HttpStatusCode.OK);
    }

使用此模型对您的JSON

进行挑选
public class Log
{
    public List<Dictionary<string,string>> LogEntry { get; set; }
}

var log = JsonConvert.DeserializeObject<Log>(json);

您也可以使用linq

var jObj = JObject.Parse(json);
var listOfDict = jObj["LogEntry"]
                    .Select(x => x.Cast<JProperty>()
                                .ToDictionary(p => p.Name, p => p.Value))
                    .ToList();

只需将模型更改为此。

    public class EventManagerLogEntry
    {
        [JsonProperty("LogEntry")]
        public List<Node> LogEntries { get; set; }
    }
    public class Node 
    {
        public int a { get; set; }
        public string b { get; set; }
        public string c { get; set; }
        public string d { get; set; }
        public int e { get; set; }
        public string f { get; set; }
        public string g { get; set; }
        public string h { get; set; }
        public string i { get; set; }
        public string j { get; set; }
        public int k { get; set; }            
        public int l { get; set; }
        public string m { get; set; }
        public string n { get; set; }            
        public int o { get; set; }
        public int p { get; set; }
        public string q { get; set; }
        public string r { get; set; }          
        public int s { get; set; }
    }

和简单的供应对象。

var obj = JsonConvert.DeserializeObject<EventManagerLogEntry>(yourjson);

您可以做出一些改进以使此工作。首先是您不需要手动估算您的JSON。

public class Value
{
    public String Name { get; set; }
}
...
[HttpPost("one")]
public void Post([FromBody] Value value)
{
    Console.WriteLine("got one");
}
[HttpPost("many")]
public void Post([FromBody] Value[] value)
{
    Console.WriteLine("got many");
}

您可以在邮政方法中使用类定义来自动从JSON获取对象。

第二您可以做两件事之一:

  1. 仅将数组JSON发布到服务器上并使用数组
  2. 创建一个新模型,将您的列表封装为 @l.b所提到的。

以下是发送到上述有效路线的JSON数据。

One
{ "name" : "test" }
Many
[{ "name" : "test" }]

相关内容

  • 没有找到相关文章

最新更新