我有一个名为ResponseModel
的类,并且该类中一个名为Errors
的对象引用了类ErrorsResponseModel
,并且该类中有一堆对象的数据类型为List<string>
。我想知道如何不经过List<string>
和VariableClassA.ObjectOfClassAWhichReferToTheClassB.FirstListOfString
这样访问VariableClassA.ObjectOfClassAWhichReferToTheClassB.SecondListOfString
对象,List<string>
对象的数据来自JSON数据。
我只尝试访问每个对象一个对象,因为我不确定如何在不通过每个对象一个对象的情况下进行泛型,这就是如果我更新B类本身的模型,那么我需要确保我没有错过对B类中新创建的对象的必要检查。
这是模型的代码:
public sealed class ResponseModel
{
public ErrorsResponseModel Errors { get; set; }
}
public sealed class ErrorsResponseModel
{
public List<string> Username { get; set; }
public List<string> Password { get; set; }
public List<string> Nickname { get; set; }
}
这是我到目前为止尝试过的:
string jsonData = "{"Errors":{"Username":["The username field is required."],"Password":["The password field is required."],"Nickname":["The nickname field is required."]}}";
var jsonConvertedData = JsonConvert.DeserializeObject<ResponseModel>(jsonData);
var usernameErrors = jsonConvertedData.Errors.Username;
var passwordErrors = jsonConvertedData.Errors.Password;
var nicknameErrors = jsonConvertedData.Errors.Nickname;
我希望循环ErrorsResponseModel
类的任何对象,使该类内List<string>
的长度大于0。我无法从JSON更改响应数据,因为它来自第三方。
编辑:我已经在JavaScript中尝试了以下方法,并且可以正常工作,如何在C#中执行相同的操作?
在C#中,我像使用下面的return Json(jsonConvertedData)
返回前端,在前端中,我喜欢以下内容:
$.ajax({
..... the AJAX settings
success: function (data) {
$.each(data.Errors, function (i, v) {
if (v.length > 0) {
console.log(v);
}
});
}
上面的Javascript代码正在ErrorsResponseModel
内的每个对象内遍历消息,并将其读到控制台。
答案 0 :(得分:1)
让 override fun onDraw(canvas: Canvas) {
super.onDraw(canvas)
cv=canvas
draw_beautiful_async(canvas)
invalidate()
}
fun draw_beautiful_async(canvas: Canvas) {
MyDrawingWorkerTask().execute()
}
继承class MyDrawingWorkerTask() : AsyncTask<Canvas, Void, Void>() {
override fun doInBackground(vararg canvases: Canvas): Void? {
vt = 0; var x1 = 0f; var y1 = 0f; var style = 0
for (i in 1..cloud_number) {
vt = i * 4 - 3
style = mt_cloud[vt]
x1 = mt_cloud[vt + 2].toFloat()
y1 = mt_cloud[vt + 3].toFloat()
cv.drawBitmap(canvas_cloud1, x1, y1, mPaint)
}
return null
}
ErrorsResponseModel
现在您可以像普通字典一样遍历Dictionary
public sealed class ErrorsResponseModel : Dictionary<string, List<string>>
{
//If you still want to access data with property.
public List<string> Username => this["Username"];
...
}
Errors
是另一种选择
foreach (var item in jsonConvertedData.Errors)
if(item.Value.Count > 0)
Console.WriteLine($"{item.Key} => {item.Value[0]}");
答案 1 :(得分:0)
一种方法是创建一个类来保存相关数据,例如:
class User
{
public string Name { get; set; }
public string Nickname { get; set; }
public string Password { get; set; }
}
然后,我们可以创建一个方法来填充ErrorsResponseModel
类中的此类列表(在首先确认所有列表的计数都相同之后):
public List<User> GetUsers(ErrorsResponseModel errors)
{
if (errors == null || errors.Username == null) return null;
if (errors.Username.Count == 0) return new List<User>();
if (errors.Nickname?.Count != errors.Password?.Count ||
errors.Password?.Count != errors.Username.Count)
{
throw new InvalidDataException("Unequal number of Usernames/Passwords/Nicknames");
}
return errors.Username
.Select((userName, index) =>
new User
{
Name = userName,
Nickname = errors.Nickname[index],
Password = errors.Password[index]
}).ToList();
}