Как автоматически установить свойство приращения при привязке модели - PullRequest
0 голосов
/ 22 марта 2019

У меня есть тело запроса ввода для моего приложения ASP.NET Core MVC, которое я связываю с моделью запроса в C #.

public class Request 
{
    public int Index {get;set;}
    public string DocType {get;set;}
    public string DocId {get;set;}
}

Это мой запрос JSON

{
"request" : [
    {
        "DocType" : "MSWORD",
        "DocId"   : "553ed6c232da426681b7c45c65131d33"
    },
    {
        "DocType" : "MSEXCEL",
        "DocId"   : "256ed6c232da426681b7c45c651317895"
    }]
}

Я хочу сопоставить этот запрос с моей моделью C #, чтобы свойство Index автоматически увеличивалось.

Другими словами, когда я десериализирую свой запрос C # в строку JSON, он должен выглядеть следующим образом.

{
"request" : [
    {
        "Index"   : 0,
        "DocType" : "MSWORD",
        "DocId"   : "553ed6c232da426681b7c45c65131d33"
    },
    {
        "Index"   : 1,
        "DocType" : "MSEXCEL",
        "DocId"   : "256ed6c232da426681b7c45c651317895"
    }]
}

Ответы [ 2 ]

1 голос
/ 22 марта 2019

Перед сериализацией в JSON просто выполните "беседу", используя LINQ:

//below should be your original list instead of this test data
var list = new List<Request>
{
    new Request {DocId = "000", DocType = "type"},
    new Request {DocId = "111", DocType = "type"},
    new Request {DocId = "222", DocType = "type"}
};

var count = 0;

var newList = list.Select(x =>
{
    x.Index = count++;
    return x;
}).ToList();

ОБНОВЛЕНИЕ Благодаря Эрику и его комментарию выше код можно упростить до

var newList = list.Select((x, index) =>
{
    x.Index = index;
    return x;
}).ToList();
0 голосов
/ 22 марта 2019

Объявите статическую переменную int для хранения числа и используйте конструктор, чтобы присвоить значение Index.

using System.Collections.Generic;
using Newtonsoft.Json;

namespace ConsoleApp2 {
  class Program {
    static void Main() {

      string json = @"[{'DocType' : 'MSWORD','DocId'   : '553ed6c232da426681b7c45c65131d33'},{'DocType' : 'MSEXCEL','DocId'   : '256ed6c232da426681b7c45c651317895'}]";
      Request.Seed = 1;
      var r = JsonConvert.DeserializeObject<List<Request>>(json);
      Request.Seed = 100000;
      r = JsonConvert.DeserializeObject<List<Request>>( json );

    }
  }
  public class Request {
    public static int Seed { get; set; }

    public Request() {
      Index = Seed++;
    }
    public int Index { get; set; }
    public string DocType { get; set; }
    public string DocId { get; set; }
  }
}
...