将自定义对象添加到列表<对象>

本文关键字:对象 列表 添加 自定义 | 更新日期: 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((] 添加到我的类之后也是如此。有什么信息吗?