我遇到了问题,我无法将自定义对象添加到我的列表中。但是,如果我添加一些预定义的对象(字符串,整数......),我的代码就可以了。 这是我的类,它总是在对该控制器的所有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控制台日志中。
Image of google chrome console
然而,当我使用这行代码时
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;
}
答案 0 :(得分:0)
正如所写,您的C#代码无法正常工作但会编译。调用ajax时会抛出错误,您可能永远不会看到错误消息(取决于系统的设置方式)。
这是正确的代码(给出您的代码段)
returnData data = new returnData();
data.data = new List<object>();
// rest of your code.
答案 1 :(得分:0)
我使用Newtonsoft.Json解决了这个问题。我使用以下代码序列化了对象:
string jsondata = JsonConvert.SerializeObject(data);
然后我返回序列化的字符串而不是对象。看起来像Visual Studio开发中心无法序列化我的对象,即使在我的类中添加[Serializable()]之后也是如此。有关于此的任何信息吗?