使用Rest API将数据插入到Azure表存储中时,将OData类型插入JSON负载的最佳方法

时间:2019-06-14 09:05:40

标签: c# azure azure-storage

当我使用azure表存储Insert Entity api插入数据时。

我的实体类中有一些类型,例如dateTime,int。并按照此doc进行操作:默认情况下,除非您指定其他类型,否则属性将创建为String类型。

因此,我想知道哪种是将odata类型添加到json有效负载的最佳方法?添加了odata类型的生成的json有效负载应如下所示:

enter image description here

我当前的解决方案是在生成json字符串之后,将其视为字符串,然后将odata类型直接添加到json中。但是我认为应该有更好的方法。

我的代码如下:

实体类:

public class MyClass
{

    public string PartitionKey { get; set; }
    public string RowKey { get; set; }
    public string Name { get; set; }

    public Guid TestId { get; set; }
}

主要方法:

        static void Main(string[] args)
        {

            string url_with_sasToken = "https://xxx.table.core.windows.net/ttt?sasToken";

            MyClass entity = new MyClass
            {
                PartitionKey = "ivan2",
                RowKey = "y1",
                Name = "jack60",
                TestId = Guid.NewGuid()
            };

            //here, I add the odata type for Guid type
            string s = JsonConvert.SerializeObject(entity).Replace("}","");
            s += ",\"TestId@odata.type\"" + ":" + "\"Edm.Guid\"}";
            Console.WriteLine(s);

            var content = new StringContent(s, Encoding.UTF8, "application/json");

            using (HttpClient client = new HttpClient())
            {
                client.DefaultRequestHeaders.Accept.Clear();
                client.DefaultRequestHeaders.Accept.Add(new
          MediaTypeWithQualityHeaderValue("application/json"));
                var t2 = client.PostAsync(url_with_sasToken , content).GetAwaiter().GetResult();
                Console.WriteLine(t2.StatusCode);
            }

        }

1 个答案:

答案 0 :(得分:1)

恕我直言,一种更好的方法是利用Reflection并通过迭代类的公共属性来动态创建JSON。您只能选择Table服务支持的那些属性类型(例如Guid,DateTime等)

这样,您就不会不断更改序列化代码以反映类定义中的更改。在任何情况下,使用+符号进行字符串连接都是一个坏主意:)。

作为参考,您可以看一下Storage SDK中TableEntity类的代码。我从Github(https://github.com/Azure/azure-storage-net/releases/tag/v9.3.2)下载了9.3.2版的代码,因为这是支持SDK中Table的最新版本。