当我使用azure表存储Insert Entity api插入数据时。
我的实体类中有一些类型,例如dateTime,int。并按照此doc进行操作:默认情况下,除非您指定其他类型,否则属性将创建为String类型。
因此,我想知道哪种是将odata类型添加到json有效负载的最佳方法?添加了odata类型的生成的json有效负载应如下所示:
我当前的解决方案是在生成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);
}
}
答案 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的最新版本。