我正在尝试使用bigquery,它的c# API和复杂类型。
我有一个像 这样的对象public class MyObject
{
public MyOtherObject SomeProperty { get; set; }
}
public class MyOtherObject
{
public string InnerProperty { get; set; }
public MyEnum OtherInnerProperty { get; set; }
}
表中MyOtherObject对应的字段是一个RECORD
,有一个InnerProperty STRING
字段,还有一个OtherInnerProperty STRING
字段。
与TableDataInsertAllRequest.RowsData
一起工作,当我尝试在Json
属性(实际上是Dictionary<string,object>
)中"映射"具有相应字段的属性MyOtherObject时,抛出错误,因为(我假设)OtherInnerProperty,这是一个enum,不能转换为字符串。
知道在这种情况下如何处理枚举吗?
谢谢。
编辑:显然,我可以有对应于"OtherInnerProperty"的字段作为BQ表中的INTEGER字段,但我宁愿有OtherInnerProperty. tostring(),并在我的表中获得该字符串值…
我不知道你是否已经解决了这个问题,但我也有这个问题,我解决它如下:
创建服务时:
var service = new BigqueryService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = applicationName
});
添加Serializer = new EnumToStringNewtonsoftJsonSerializer()
,其中EnumToStringNewtonsoftJsonSerializer是Google.Apis.Json.NewtonsoftJsonSerializer的修改,可以在这里找到:https://code.google.com/p/google-api-dotnet-client/source/browse/Src/GoogleApis.Core/Apis/Json/NewtonsoftJsonSerializer.cs?name=1.8.1
在EnumToStringNewtonsoftJsonSerializer的构造函数中放入:
JsonSerializerSettings settings = new JsonSerializerSettings();
settings.NullValueHandling = NullValueHandling.Ignore;
settings.Converters.Add(new RFC3339DateTimeConverter());
settings.Converters.Add(new Newtonsoft.Json.Converters.StringEnumConverter());
newtonsoftSerializer = JsonSerializer.Create(settings);