我有以下方法:
public static object GetValueFromAttributeValue(AttributeValue value)
{
if(value == null) return null;
if(value.N != null) return Convert.ToInt64(value.N); //long
if(value.B != null) return value.B; //MemoryStream
if(value.S != null) return value.S; //string
if(value.SS != null) return value.SS; //List<string>
if(value.BS != null) return value.BS; //List<MemoryStream>
if(value.NS != null) return value.NS.Select(v => Convert.ToInt64(v)).ToList(); //List<long>
if(value.IsLSet && value.L != null) return value.L.Select(v => GetValueFromAttributeValue(v)).ToList(); //List<object>
if(value.IsMSet && value.M != null) return value.M.ToDictionary(i => i.Key, i => GetValueFromAttributeValue(i.Value)); //Dictionary<string, object>
if(value.IsBOOLSet) return value.BOOL; //bool
return null;
}
这里的问题是AttributeValue.SS
,AttributeValue.BS
和AttributeValue.NS
永远不会为空,即使AttributeValue
对象本身没有映射到任何列表,它只返回一个空列表。
因此,从未达到或满足这三个以下的所有条件,因为(value.SS != null)
始终为真。
AttributeValue
未定义类似IsSSet
或类似内容的属性,因此我可以知道该值实际上是SS
,{{1} }或BS
。
您可以看到此辅助属性存在于其他属性值类型,例如NS
,L
和M
。
如果属性值对应于字符串类型,则为BOOL
,还有S != null
,SS != null
和BS != null
。
如果属性值对应于例如字符串集,那么NS != null
,SS != null
,BS != null
。
如您所见,我无法确定某个值是否与三种类型中的任何一种相对应。我无法识别这些属性值。