Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Azure搜索文档中使用枚举_C#_Azure_Enums_Azure Cognitive Search_Azure Search .net Sdk - Fatal编程技术网

C# 在Azure搜索文档中使用枚举

C# 在Azure搜索文档中使用枚举,c#,azure,enums,azure-cognitive-search,azure-search-.net-sdk,C#,Azure,Enums,Azure Cognitive Search,Azure Search .net Sdk,我的理解是,如果搜索文档中有枚举,它将转换为int。除非我做了错误,否则这似乎不会发生,唯一能使它工作的方法是将枚举转换为字符串。这似乎是错误的。有人能告诉我我是否做错了什么,或者这是不可能的吗 例如: public enum WebSearchRecordType{ Unknown = 0, Doc1 = 1, Doc2 = 2 } public class WebSearchDocument{ public Guid Id {get;set;} pu

我的理解是,如果搜索文档中有枚举,它将转换为int。除非我做了错误,否则这似乎不会发生,唯一能使它工作的方法是将枚举转换为字符串。这似乎是错误的。有人能告诉我我是否做错了什么,或者这是不可能的吗

例如:

public enum WebSearchRecordType{
    Unknown = 0,
    Doc1 = 1,
    Doc2 = 2
}

public class WebSearchDocument{
    public Guid Id {get;set;}
    public WebSearchRecordType RecordType { get; set; }
}
如果我在尝试创建索引时使用类似于上面的内容,则会出现以下错误:

消息:“属性recordType的类型不受支持 Web.Search.WebSearchRecordType\r\n参数名称:propertyType“


Azure Search不支持枚举类型作为字段类型。相反,您需要自己在枚举和一种受支持的数据类型之间进行映射(int或string,具体取决于您是否希望将标签或基础值存储在索引中)。实现这一点的一种方法是使用
[JsonIgnore]
标记您的枚举属性,然后实现所需字段类型的第二个属性,并在getter/setter中映射它和您的枚举。请注意,您可以使用
[JsonProperty(“…”)
属性控制属性名称如何映射到索引字段


此外,模型类使用
Guid
作为键字段的类型。这也不受支持。您可以使用相同的技术将自己的
Guid
属性映射到实际映射到相应索引字段的字符串属性。

对,我意识到我的示例不好,所以我将在一分钟内复制一些代码。您使用的Microsoft.Azure.Search包的版本是什么?另外,你能分享你用来创建索引的代码吗?欢迎回到我疯狂的生活@BruceJohnston:)1)我知道不支持guid,我们正在将它们转换为字符串2)我尝试了你的第一个建议,将枚举设置为[JsonIgnore]然后有另一个属性读取字符串/int,但当它试图从Azure Search SDK中的方法构建索引时引发了一个异常(我必须再次重新生成它,以便将其提供给您)3)最后,我只是将该属性更改为字符串,并编写了一个扩展方法将其转换回。4) 我的问题是,虽然Azure Search可能不支持枚举,但人们会认为它可以在默认情况下将其转换为int。目前还不清楚int是否是正确的默认值。为什么不用绳子?如果在枚举的中间添加一个新标签,其他标签的值可能会改变,而如果只使用标签作为字符串,则不会更改。您必须小心地获得正确的持久性契约,否则以后可能会遇到一些令人讨厌的兼容性问题。如果您想继续讨论SDK如何支持枚举,请随意在此处创建一个问题,并以“Search SDK:”--您有一个非常有效的观点,即将枚举默认为int。我承认这不是支持枚举的理想方式。我将提出一个关于我所说的问题,即JsonIgnore/属性在索引创建期间失败。谢谢。请在提交问题时提供尽可能多的详细信息。我能找到解决办法,所以我们得看看你的情况有什么不同。