如何将对象内的属性列表转换为对象列表

时间:2019-08-08 21:16:44

标签: c# asp.net arrays json list

我在Json中有一些数据列表,并被转换为Object using Json.net,因此它应该是一个对象列表模型,但是我收到了一个带有属性列表的对象模型。怎么了。

这是我的JSON:

{
  "ControleId": [
    "59",
    "60"
  ],
  "NameFileCust": [
    "Teste",
    "Tabelas Files"
  ],
  "FlagCtb": [
    "true"
  ],
  "FlagCom": [
    "true"
  ],
  "FlagSite": [
    "true"
  ]
}

此处将我的JSON转换为Object C#:

  public class RootObject
  {
    public List<int> ControleId { get; set; }
    public List<string> NameFileCust { get; set; }
    public List<bool?> FlagCtb { get; set; }
    public List<bool?> FlagCom { get; set; }
    public List<bool?> FlagSite { get; set; }
  }

这里应该是:

  public class JsonToObject
  {
    public List<RootObject> DocList { get; set; }
  }
  public class RootObject
  {
    public int ControleId { get; set; }
    public string NameFileCust { get; set; }
    public bool? FlagCtb { get; set; }
    public bool? FlagCom { get; set; }
    public bool? FlagSite { get; set; }
  } var jsonToModel = JsonConvert.DeserializeObject<JsonToObject>(dicToJson);

我尝试convert再做一次listtuple e等。

 var dicToJson = JsonConvert.SerializeObject(openAsDic, Formatting.Indented);
      var jsonToModel = JsonConvert.DeserializeObject<RootObject>(dicToJson);
      var tuple = Tuple.Create(jsonToModel);
      //Tuple<FileDocuments> tuple2 = Tuple.Create(jsonToModel) as 
   FileDocuments;


      var listObject = new List<RootObject>
      {
        new RootObject
        {
          ControleId = jsonToModel.ControleId,
          FlagCtb = jsonToModel.FlagCtb,
          FlagCom = jsonToModel.FlagCom,
          FlagSite = jsonToModel.FlagSite
        },
      };

完整代码:

public ActionResult UpdateFileDocsListedDocs(FormCollection form) 
    {
      IValueProvider valueProvider = form.ToValueProvider();
      var openAsDic =  new Dictionary<string, object>();
      foreach (string key in form.Keys)
      {
        ValueProviderResult result = valueProvider.GetValue(key);
        object value = result.RawValue;
        openAsDic.Add(key, value);
      }
      var dicToJson = JsonConvert.SerializeObject(openAsDic, 
 Formatting.Indented);
      var jsonToModel = JsonConvert.DeserializeObject<RootObject>(dicToJson);
      var tuple = Tuple.Create(jsonToModel);
      //Tuple<FileDocuments> tuple2 = Tuple.Create(jsonToModel) as 
 FileDocuments;


      var listObject = new List<RootObject>
      {
        new RootObject
        {
          ControleId = jsonToModel.ControleId,
          FlagCtb = jsonToModel.FlagCtb,
          FlagCom = jsonToModel.FlagCom,
          FlagSite = jsonToModel.FlagSite
        },
      };

      var oriSetor = FileViewModel.Instance.FileDados.OriCodigo;
      if (user.Setor == oriSetor)
      {
        foreach (var uploadedDoc in listObject)
        {
          List<RootObject> root = new List<RootObject>();
          root.Add(new RootObject { ControleId = uploadedDoc.ControleId, 
 NameFileCust = uploadedDoc.NameFileCust, FlagCtb = uploadedDoc.FlagCtb, 
 FlagCom = uploadedDoc.FlagCom, FlagSite = uploadedDoc.FlagSite });
          var nullValueCtb = uploadedDoc.FlagCtb == null ? false : true;
          var nullValueCom = uploadedDoc.FlagCtb == null ? false : true;
          var nullValueSite = uploadedDoc.FlagCtb == null ? false : true;

          //_context.UpdateFileIntra(uploadedDoc.ControleId, 
 jsonToModel.NameFileCust.FirstOrDefault(), nullValueCtb, nullValueCom, 
 nullValueSite, user.UserId);
        }

      }
      else
      {
        FileViewModel.Instance.HasError = true;
      }


      return RedirectToAction("GetFile", "File", new { fileCodigo = fileCodigo 
  });
    }

1 个答案:

答案 0 :(得分:1)

遵循方法“ 保持简单”,我使用简单的循环For而不是Foreach解决了我的问题。 我遍历jsonToModel.ControleId,因为那是我的ID。 对于jsonToModel上显示的每个值,我将其存储在 DataBase 上。下面我给出了结束代码:

public ActionResult UpdateFileDocsListedDocs(FormCollection form) 
{
  var oriSetor = FileViewModel.Instance.FileDados.OriCodigo;
  IValueProvider valueProvider = form.ToValueProvider();
  var openAsDic =  new Dictionary<string, object>();
  foreach (string key in form.Keys)
  {
    ValueProviderResult result = valueProvider.GetValue(key);
    object value = result.RawValue;
    openAsDic.Add(key, value);
  }
  var dicToJson = JsonConvert.SerializeObject(openAsDic, Formatting.Indented);
  var jsonToModel = JsonConvert.DeserializeObject<RootObject>(dicToJson);

  if (user.Setor == oriSetor)
  {
    for (int i = 0; i < jsonToModel.ControleId.Count(); i++)
    {
      var buildModelObject = new FileDocuments();
      buildModelObject.ControleId = jsonToModel.ControleId[i];
      buildModelObject.NameFileCust = jsonToModel.NameFileCust[i] == null ? "" : jsonToModel.NameFileCust[i];
      buildModelObject.FlagCtb = jsonToModel.FlagCtb[i];
      buildModelObject.FlagCom = jsonToModel.FlagCom[i];
      buildModelObject.FlagSite = jsonToModel.FlagSite[i];
      _context.UpdateFileIntra(buildModelObject.ControleId, buildModelObject.NameFileCust, buildModelObject.FlagCtb, buildModelObject.FlagCom, buildModelObject.FlagSite, user.UserId);
    }
  }
  else
  {
    FileViewModel.Instance.HasError = true;
  }


  return RedirectToAction("GetFile", "File", new { fileCodigo = fileCodigo });
}
相关问题