google bigquery c# API enum



我正在尝试使用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);

相关内容

  • 没有找到相关文章

最新更新