同一命名空间同名类调用:如何指定使用Microsoft.Azure.Documents的UnixDateTimeConverter
解决同名类冲突问题
问题背景
项目同时依赖Microsoft.Azure.Cosmos(v3.29.1.0)与Microsoft.Azure.Documents(v2.10.3.0)包,二者在Microsoft.Azure.Documents命名空间下存在同名类UnixDateTimeConverter。需强制使用Microsoft.Azure.Documents包中带public访问修饰符的该类,当前冲突出现在CosmosModel/Student.cs文件中。
解决方法
方案1:使用外部别名(Extern Alias)
- 右键项目中的
Microsoft.Azure.Documents引用 → 属性 - 在“别名”字段输入自定义别名(如
DocumentsV2)并保存 - 修改
Student.cs代码,添加别名声明并指定目标类:
extern alias DocumentsV2; namespace DataAccess.CosmosModel{ public class Student{ public string id { get; set; } public string Email { get; set; } public bool IsEmailConfirmed { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public DateTime DateOfBirth { get; set; } public string PhoneNumber { get; set; } public string CountryCode { get; set; } [Newtonsoft.Json.JsonConverter(typeof(DocumentsV2::Microsoft.Azure.Documents.UnixDateTimeConverter))] [Newtonsoft.Json.JsonProperty(PropertyName = "_ts")] public virtual DateTime Timestamp { get; set; } }
方案2:使用程序集限定名
无需设置别名,直接在typeof中指定类的完整程序集信息,明确指向目标包的类:
namespace DataAccess.CosmosModel{ public class Student{ public string id { get; set; } public string Email { get; set; } public bool IsEmailConfirmed { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public DateTime DateOfBirth { get; set; } public string PhoneNumber { get; set; } public string CountryCode { get; set; } [Newtonsoft.Json.JsonConverter(typeof(Microsoft.Azure.Documents.UnixDateTimeConverter, "Microsoft.Azure.Documents.Client, Version=2.10.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"))] [Newtonsoft.Json.JsonProperty(PropertyName = "_ts")] public virtual DateTime Timestamp { get; set; } }
注意:需确保程序集名称、版本号、公钥Token与你引用的
Microsoft.Azure.Documents包完全匹配,可通过查看该包的属性获取这些信息。
内容的提问来源于stack exchange,提问作者Dat Ha
相关产品推荐
相关产品推荐

