C# Silverlight InitParams,其中值包含逗号

C# Silverlight InitParams,其中值包含逗号,c#,asp.net,silverlight-2.0,C#,Asp.net,Silverlight 2.0,在Silverlight 2中,使用ASP.NET上的C#,可以通过为Silverlight对象的initiparms分配一个字符串来传递一组初始化参数,该字符串是一系列逗号分隔的键/值对 我见过其他系统也有类似的机制,可以将键/值对集合作为单个字符串传递 指定包含逗号的值的解决方案是什么 例如,此字符串没有问题: string s1 = "key1=value1,key2=value2"; 但这一个是: string s2 = "key1=value1,key2=two,values";

在Silverlight 2中,使用ASP.NET上的C#,可以通过为Silverlight对象的initiparms分配一个字符串来传递一组初始化参数,该字符串是一系列逗号分隔的键/值对

我见过其他系统也有类似的机制,可以将键/值对集合作为单个字符串传递

指定包含逗号的值的解决方案是什么

例如,此字符串没有问题:

string s1 = "key1=value1,key2=value2";
但这一个是:

string s2 = "key1=value1,key2=two,values";

i、 e.“两个值”需要以某种方式转义逗号…

不幸的是,在快速搜索之后,我认为InitParams的解析机制不会遵循任何类型的编码方案。如果它是一个URL查询字符串片段,实际上会更好,它有一个相当标准的编码和规则,并且是逗号友好的

因此,我认为您唯一的选择是使用不同的delimeter,例如管道符号|

例如:


无论出于何种原因,如果值中必须是逗号,您可以始终执行String.Replace…

我也遇到了同样的问题,并对InitParams使用了URL编码。我使用web.config文件中的silverlightInitParams部分一次加载多个参数并生成initParams字符串,如下所示:

var initParams = new StringBuilder();
var initParamsFromConfig = (NameValueCollection)ConfigurationManager.GetSection("silverlightInitParams");
foreach (string key in initParamsFromConfig)
{
    initParams.AppendFormat("{0}={1},", key, Server.UrlEncode(initParamsFromConfig[key]));
}
在应用程序启动的Silverlight客户端中,我提取参数并将其存储在字典中:

foreach (var initParam in e.InitParams)
{
    InitParameters.Add(initParam.Key, HttpUtility.UrlDecode(initParam.Value));
}
foreach (var initParam in e.InitParams)
{
    InitParameters.Add(initParam.Key, HttpUtility.UrlDecode(initParam.Value));
}