Json 有没有办法将RedisValue[]转换为字符串[]?
我有一个从Json 有没有办法将RedisValue[]转换为字符串[]?,json,stackexchange.redis,Json,Stackexchange.redis,我有一个从StackExchange.Redis客户端返回的数组RedisValue[]。我想获取数组中的每个值(实际上是JSON字符串),并将它们连接在一起,得到一个有效的JSON字符串,然后返回给客户端 这是我想做的 var results = redis.HashGet("srch", ArrayOfRedisKeys[]); string returnString = "[" + string.Join(results, ",") + "]"; 但是,这不起作用,因为results是
StackExchange.Redis
客户端返回的数组RedisValue[]
。我想获取数组中的每个值(实际上是JSON
字符串),并将它们连接在一起,得到一个有效的JSON
字符串,然后返回给客户端
这是我想做的
var results = redis.HashGet("srch", ArrayOfRedisKeys[]);
string returnString = "[" + string.Join(results, ",") + "]";
但是,这不起作用,因为results
是RedisValue
的数组,而不是string
的数组。除了迭代RedisValue
数组之外,还有没有一种直接有效的方法来实现这一点?目前还没有,但我有以下扩展方法进入ExtensionMethods.cs
:
static readonly string[] nix = new string[0];
/// <summary>
/// Create an array of strings from an array of values
/// </summary>
public static string[] ToStringArray(this RedisValue[] values)
{
if (values == null) return null;
if (values.Length == 0) return nix;
return Array.ConvertAll(values, x => (string)x);
}
静态只读字符串[]nix=新字符串[0];
///
///从值数组创建字符串数组
///
公共静态字符串[]到字符串数组(此值为[]个值)
{
if(value==null)返回null;
如果(values.Length==0)返回nix;
返回Array.ConvertAll(值,x=>(字符串)x);
}
因此:在下一个构建中,您只需使用
results.tostringaray()
。在此之前,您可以在本地复制上述内容。ALERT。注意:如果值为null,则使用values.tostringaray()
永远不会成功,因此最好像使用tostringaray(values)
那样使用它,而不使用扩展方法this
@Jaider您可以对null
值调用扩展方法。以下操作可以正常工作:RedisValue[]vals=null;字符串[]foo=vals.tostringaray()
-foo
将为null
,因为第一个返回
。这正是因为编译器只是将其重写为string[]foo=ExtensionMethods.tostringaray(vals)哇,我印象深刻!那就无视我之前的评论:)@marcgravel-Hmm。。当我在fx MEMORY STATS上使用该方法时,我将RedisValue[]更改为RedisResult[]时,我得到一个错误,指出InvalidCastException,因为在索引16中,我在数组中有一个数组-对此有任何解决方案/建议吗?@badaboomskey您能更具体一点吗?您应该有一个RedisResult——因为它是一个非典型的结果结构,所以您必须通过检查每个节点来手动探索它。您是否看到了一个具体的问题,我们可以用一个例子来讨论?