将List<Object>转换为ByteArray

4

目前,我使用JsonResults将服务器端的对象发送到客户端。

当前代码如下:

[HttpGet]
    public JsonResult Get()
    {
        //Create a List object, categoryList which can store anonymous objects later.
        List<object> categoryList = new List<object>();

        var categoriesQueryResult = Database.Categories
                 .Where(eachCategory => eachCategory.DeletedAt == null)
                 .Include(eachCategory => eachCategory.CreatedBy)
                 .Include(eachCategory => eachCategory.UpdatedBy);

        //Loop through each Category entity in  the categoriesQueryResult's and add it into categoryList
        foreach (var oneCategory in categoriesQueryResult)
        {
            categoryList.Add(new
            {
                categoryId = oneCategory.CategoryId,
                categoryName = oneCategory.CategoryName,
                visibility = oneCategory.Visibility,
                displayStart =  oneCategory.DisplayStart,
                displayEnd = oneCategory.DisplayEnd,
                createdAt = oneCategory.CreatedAt,
                updatedAt = oneCategory.UpdatedAt,
                createdBy = oneCategory.CreatedBy.FullName,
                updatedBy = oneCategory.UpdatedBy.FullName,
                isSpecial = oneCategory.IsSpecial

            });
        }//end of foreach

        return new JsonResult(categoryList);
    }// end of get

现在我想做的是将List转换为ByteArray,然后将转换后的对象作为ByteArray返回给客户端。

我已经尝试过:

[HttpGet]
    public byte[] Get()
    {
        //Create a List object, categoryList which can store anonymous objects later.
        List<object> categoryList = new List<object>();

        var categoriesQueryResult = Database.Categories
                 .Where(eachCategory => eachCategory.DeletedAt == null)
                 .Include(eachCategory => eachCategory.CreatedBy)
                 .Include(eachCategory => eachCategory.UpdatedBy);

        //Loop through each Category entity in  the categoriesQueryResult's and add it into categoryList
        foreach (var oneCategory in categoriesQueryResult)
        {
            categoryList.Add(new
            {
                categoryId = oneCategory.CategoryId,
                categoryName = oneCategory.CategoryName,
                visibility = oneCategory.Visibility,
                displayStart =  oneCategory.DisplayStart,
                displayEnd = oneCategory.DisplayEnd,
                createdAt = oneCategory.CreatedAt,
                updatedAt = oneCategory.UpdatedAt,
                createdBy = oneCategory.CreatedBy.FullName,
                updatedBy = oneCategory.UpdatedBy.FullName,
                isSpecial = oneCategory.IsSpecial

            });
        }//end of foreach
        byte[] convertedObject = categoryList.OfType<byte>().ToArray();

        return convertedObject;
    }// end of get

但似乎不起作用。

为什么您想将它转换为字节数组?客户端如何理解它? - Andrii Litvinov
1个回答

8
你可以使用BinaryFormatter来获取字节数组。
byte[] bytes = null;
BinaryFormatter bf = new BinaryFormatter();
using (MemoryStream ms = new MemoryStream())
{
    bf.Serialize(ms, categoryList);
    bytes = ms.ToArray();
}

3
请注意,匿名类型无法通过 BinaryFormatter 进行序列化,因此您需要创建一个 [Serializable] 类型,并将 categoryList 的类型更改为 List<TheNewlyCreatedSerializableClass>。 此问题中指出了一些方法在这里,但它们似乎不被推荐。 - granit
如果我想进行反序列化,应该如何正确地操作? - Matthew

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接