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

时间:2013-10-05 00:42:36

标签: c# asp.net jquery

我遇到了问题,我无法将自定义对象添加到我的列表中。但是,如果我添加一些预定义的对象(字符串,整数......),我的代码就可以了。 这是我的类,它总是在对该控制器的所有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;
    }

2 个答案:

答案 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()]之后也是如此。有关于此的任何信息吗?