【问题标题】:how to convert an attribute list within an object to object list如何将对象内的属性列表转换为对象列表
【发布时间】:2019-12-16 15:27:29
【问题描述】:

我在 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 做另一个 list, tuple 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 
  });
    }

【问题讨论】:

  • 什么是JsonToObject?你为什么把它包括在你的问题中?我在您的代码或其他类中的任何地方都没有看到它?我不明白你的问题
  • JsonToObject 是一个递归数据结构,只包含一个自身的列表,没有原始字段或属性:public class JsonToObject { public List&lt;JsonToObject&gt; DocList { get; set; } } 这真的是你想要的,还是你想要一个带有JSON 中显示的属性名称,并且每个属性名称的值都取自属性值列表?
  • 对不起各位!我已经编辑到更好的理解。

标签: c# asp.net arrays json list


【解决方案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 });
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-02
    • 2017-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-14
    • 1970-01-01
    相关资源
    最近更新 更多