我在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
});
}
答案 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 });
}