serialization - 使用 Azure 表存储的替代方法?

标签 serialization azure wcf-data-services deserialization azure-table-storage

我想使用这样的实体进行表存储:

public class MyEntity
{
    public String Text { get; private set; }
    public Int32 SomeValue { get; private set; }

    public MyEntity(String text, Int32 someValue)
    {
        Text = text;
        SomeValue = someValue;
    }
}

但这不可能,因为 ATS 需要

  1. 无参数构造函数
  2. 所有属性均公开且 读/写。
  3. 继承自TableServiceEntity;

前两件事是我不想做的两件事。为什么我希望任何人都可以更改一些应该只读的数据?或者以不一致的方式创建此类对象(那么 .ctor 的用途是什么?),或者更糟糕的是,更改 PartitionKey 或 RowKey。为什么我们仍然受到这些反序列化要求的限制?

我不喜欢以这种方式开发软件,我怎样才能以可以序列化和反序列化对象的方式使用表存储库?我认为只要对象继承自 TableServiceEntity 就不会有问题。

到目前为止,我必须保存一个对象,但我不知道如何检索它:

            Message m = new Message("message XXXXXXXXXXXXX");

            CloudTableClient tableClient = account.CreateCloudTableClient();
            tableClient.CreateTableIfNotExist("Messages");
            TableServiceContext tcontext = new TableServiceContext(account.TableEndpoint.AbsoluteUri, account.Credentials);

            var list = tableClient.ListTables().ToArray();

            tcontext.AddObject("Messages", m);
            tcontext.SaveChanges();

有什么方法可以避免这些反序列化要求或获取原始对象吗?

干杯。

最佳答案

如果您想使用存储客户端库,那么是的,您可以对要存储的对象执行哪些操作,不能执行哪些操作。第 1 点是正确的。我将第 2 点扩展为“您想要存储的所有属性都必须是公共(public)且读/写的”(对于整数属性,您可以使用只读属性,并且不会尝试保存它们),但您不这样做实际上不必继承 TableServiceEntity

TableServiceEntity 只是一个非常轻量级的类,它具有 PartitionKey、RowKey、Timestamp 属性,并用 DataServiceKey 属性进行装饰(使用 Reflector 看看)。您可以对自己创建的类执行所有这些操作,并且该类不是从 TableServiceEntity 继承的(请注意,这些属性的大小写很重要)。

如果这仍然无法让您对构建类的方式有足够的控制,您可以随时忽略存储客户端库,只使用 REST API直接地。这将使您能够以您喜欢的任何方式序列化和反序列化 XML。您将失去使用该库带来的所有好处,例如在 LINQ 中创建查询的能力。

关于serialization - 使用 Azure 表存储的替代方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4984188/

相关文章:

Azure Functions 依赖项与 AzureFunctionsTools 依赖项发生冲突

azure - 范围未添加到从 Azure Ad 返回的访问 token

node.js - 如何使用node js或任何其他方式列出所有azure容器?

c# - 找不到段 'Property' 的资源

c# - 如何将自定义类型与 WCF 数据服务和 EF 一起使用

c# - C#中涉及引用时的序列化与反序列化

c++ - 在 C++ 中序列化一个类

java - 为 Kafka 流上的窗口数据创建 SerDes

.net - 如何调试.NET中的反序列化错误?

c# - 在 IIS 上尝试我的 WCF 数据服务时得到 "401 - Unauthorized"