【发布时间】:2016-04-13 09:52:36
【问题描述】:
使用 WebAPI 返回 TableEntities 列表时,我收到 500 内部服务器错误。当我查看 Visual Studio 中的输出时,我发现我收到了这些“System.Runtime.Serialization.SerializationException”。
这是我在控制器中的代码
public IEnumerable<ContactEntity> Get()
{
var creds = new StorageCredentials("MyAccountName", "MyKey");
var storageAccount = new CloudStorageAccount(creds, false);
// Create the table client.
var tableClient = storageAccount.CreateCloudTableClient();
// Retrieve a reference to the table.
var contactsTable = tableClient.GetTableReference("contacts");
// Create the table if it doesn't exist.
contactsTable.CreateIfNotExists();
// Construct the query operation for all contact entities
var query = new TableQuery<ContactEntity>();
var items = contactsTable.ExecuteQuery<ContactEntity>(query).ToList();
return items;
}
这是我的自定义 TableEntity 代码
[Serializable]
public class ContactEntity: TableEntity
{
public ContactEntity(string firstName, string lastName)
{
this.PartitionKey = lastName;
this.RowKey = firstName;
}
public ContactEntity() { }
public string Email { get; set; }
}
在控制器中,如果我手动创建实体列表,则不会出现序列化问题。
public IEnumerable<ContactEntity> Get()
{
var creds = new StorageCredentials("MyAccountName", "MyKey");
var storageAccount = new CloudStorageAccount(creds, false);
// Create the table client.
var tableClient = storageAccount.CreateCloudTableClient();
// Retrieve a reference to the table.
var contactsTable = tableClient.GetTableReference("contacts");
// Create the table if it doesn't exist.
contactsTable.CreateIfNotExists();
// Construct the query operation for all contact entities
var query = new TableQuery<ContactEntity>();
var items = contactsTable.ExecuteQuery<ContactEntity>(query).ToList();
var manualList = new List<ContactEntity>() { };
manualList.Add(new ContactEntity { PartitionKey = items[0].PartitionKey, RowKey = items[0].RowKey, ETag = items[0].ETag, Timestamp = items[0].Timestamp });
manualList.Add(new ContactEntity { PartitionKey = items[1].PartitionKey, RowKey = items[1].RowKey, ETag = items[1].ETag, Timestamp = items[1].Timestamp });
return manualList;
}
有什么想法吗?
以下是输出窗口中列出的例外情况。
抛出异常:mscorlib.dll 中的“System.Runtime.Serialization.SerializationException” 抛出异常:mscorlib.dll 中的“System.Runtime.Serialization.SerializationException” 抛出异常:Newtonsoft.Json.dll 中的“System.Runtime.Serialization.SerializationException” 抛出异常:Newtonsoft.Json.dll 中的“System.Runtime.Serialization.SerializationException” 抛出异常:Newtonsoft.Json.dll 中的“System.Runtime.Serialization.SerializationException” 抛出异常:Newtonsoft.Json.dll 中的“System.Runtime.Serialization.SerializationException” 抛出异常:Newtonsoft.Json.dll 中的“System.Runtime.Serialization.SerializationException” 抛出异常:Newtonsoft.Json.dll 中的“System.Runtime.Serialization.SerializationException” 抛出异常:mscorlib.dll 中的“System.Runtime.Serialization.SerializationException” 抛出异常:mscorlib.dll 中的“System.Runtime.Serialization.SerializationException”
【问题讨论】:
-
您可以发布异常的详细信息吗?我认为这是因为实体附加到云表...
-
添加了输出窗口中列出的异常
标签: c# azure asp.net-web-api azure-table-storage