将自定义对象添加到列表<对象>
本文关键字:对象 列表 添加 自定义 | 更新日期: 2023-09-27 18:34:10
我有一个问题,我无法将自定义对象添加到我的列表中。但是,如果我添加一些预定义的对象(字符串,整数等(,我的代码就可以正常工作。这是我的类,它总是在对该控制器的所有 ajax 调用中返回,它包含布尔状态和对象列表。
public class returnData
{
public bool status { get; set; }
public List<object> data { get; set; }
}
这是我要添加到此列表中的对象的类:
public class file
{
public string ID { get; set; }
public string Name { get; set; }
public string Type { get; set; }
}
我使用它的代码:
returnData data = new returnData();
...
DriveFile file = JsonConvert.DeserializeObject<DriveFile>(Json);
file f = new file();
if (file.mimeType == "application/vnd.google-apps.folder")
{
f.Type = "folder";
f.ID = file.id;
f.Name = file.title;
data.data.Add(f);
}
我得到的错误没有有用的信息,因为此代码编译并且执行 ajax 时错误在 Chrome 控制台日志中。
谷歌浏览器控制台的图像
但是,当我使用这行代码时
data.data.add("some string");
我的函数将完美运行并返回包含布尔状态和对象列表(字符串、整数等(的对象
那么回到我的问题,如何将我的对象添加到此列表中?
编辑:没有服务器端错误,代码编译和运行得很好,所以这可能是一些jquery/ajax错误。
这是我的调试器的 ajax 代码:
86 $.ajax({
87 url: $('#url').val(),
88 type: $('#type option:selected').val(),
89 contentType: "application/json; charset=utf-8",
90 dataType: "json",
91 data: $('#data').val(),
92 success: function (result){
93 console.log(result)
94 },
95 error: function (err){
96 console.log(err)
97 }
98 });
这是完整的方法,但该方法似乎还可以,我猜是 ajax 或与 jquery 有关的东西。
[OperationContract]
public returnData listChildren(string folderId)
{
returnData data = new returnData();
List<object> myList= new List<object>();
bool status = true;
try
{
string Json = Response("https://www.googleapis.com/drive/v2/files/" + folderId + "/children", "GET");
//get the children list
if (!Json.Contains("error"))
{
DriveChildlist list = JsonConvert.DeserializeObject<DriveChildlist>(Json);
foreach (DriveChildren child in list.items)
{
string uriString = child.childLink;
//get the info for each child in the list
Json = Response(uriString, "GET");
if (!Json.Contains("error"))
{
DriveFile file = JsonConvert.DeserializeObject<DriveFile>(Json);
file f = new file();
if (file.mimeType == "application/vnd.google-apps.folder")
{
f.Type = "folder";
f.ID = file.id;
f.Name = file.title;
data.data.Add(f);
}
else if (file.mimeType == "application/myMimeType")
{
f.Type = "file";
f.ID = file.id;
f.Name = file.title;
data.data.Add(f);
}
}
else
{
status = false;
}
}
}
else
{
status = false;
}
}
catch(Exception)
{
status = false;
}
data.status = status;
if (!status)
{
data.data = null;
//data.data is null if status is false
}
return data;
}
编写时,C# 代码不起作用,但可以编译。 调用 ajax 时,它将抛出错误,您可能永远不会看到错误消息(取决于系统的设置方式(。
这是正确的代码(给定您的代码片段(
returnData data = new returnData();
data.data = new List<object>();
// rest of your code.
我已经使用Newtonsoft.Json解决了这个问题。我使用以下代码序列化了对象:
string jsondata = JsonConvert.SerializeObject(data);
然后我返回序列化字符串而不是对象。看起来视觉工作室开发中心无法序列化我的对象,即使在将 [Serializable((] 添加到我的类之后也是如此。有什么信息吗?