【发布时间】:2014-07-22 17:16:07
【问题描述】:
我需要将字节[][] 从 C# WCF Web 服务发送到 JSON 客户端。
原始 WCF 结果如下(在倒数第二行查找AttributeData):
{ “SA”:[ “BCtVgTmz5ZcCH34SZcsQrWQq3B7QVXSiPE57Vj7yZ / TwDNO + V3UkMr6wZKn8Fiu9 + / YNG0iESAKz4EcbimeLzQU =”, “BHez / TgkoKbRwTu / lqS18h1hagY9N9j6 / + cZhuHacWPPTgsoMOzNDInKDR7j6M + 1VAqRtCRVC2qFI4q6NFE0bRQ =”, “BL4DnZQMV / kLa5n + LviukZI2wSbsNmJb7R / Zs51Z0neRmC / JJkw5hmmU7Pkl9WoHjlMR + CERNehOiLaYvUqZfyU =”,” BPdEcJW8iVB74Cvxm720vVwxDnbVTm / jrkZ5vPb12JOXTltcTOt7wH9IeMQG9oArvgdjTevmvif09TVtaaT7uLs =”, “BFOZjjprurgN8pQszEkrUOvMybTFuj5Uitg563Rh08PoukbRcfGlyhLuYzev8m94h1fCv + Zg8i1PI0vWkgOEmlM =”], “SB”:[ “BNTHLQWFFN / gFhQ + XaWfuONLZHBXHc1UMTqYSRtEPaqeSMe99wz3pKnHQdICzsvepY6btIRPLVFZCzK5MQ7v5Do =”, “BL6NBGy6vzJmPOJKu + WMQffLvnYw8gA + 7ZYiANTOP + / 5YpVELhsUva9OxS6CugsYvsaJIiAkV96ZbBVAyp9 / 2D0 =”, “BEWrUO7QXBPH68LEk7QTXAf064fBe8KTpy8MqsfcAAZ / nB10IHMnKBSdiU + nwNhnSnbc7zCsDSzA825iDQLv9yU =”, “BIJYfLEMeF + V6IG9jZBcEP4vp0FhEejX46uEup / lY890XNQEljFy4V1NUPSgDfTGxketJLyuaf + 0lTY1aeDEGTI =”, “BMwBbG / n3ylmxyo3wbxe6nODXyvJ0VpldnRZ6Wgpkn7CVcJMyXTMmhv5rxwwshq5Wbt6tFA4c3Bwy284KAAj5yI =”], “SZ”:“+ BN39ATET17jdkI02lCEr5eQQpRS2n3f1Q2tE BTDNY / HuLCCo8Gu3hHHgPVX7 / kPN7 KmHBJlmqniKBxx5nOcXwE=",
"sid":"这是新会话 id","ti":"TokenData","NumberOfTokens":5,"AttributeData":["QXR0cmlidXRlMA==","QXR0cmlidXRlMQ==","QXR0cmlidXRlMg==","QXR0cmlidXRlMw==","QXR0cmlidXRlNA== "]}
客户
C# 消费者的代码如下所示:
var converter = new ExpandoObjectConverter();
dynamic obj = JsonConvert.DeserializeObject<ExpandoObject>(dataJsonAsListedAbove, converter);
byte[][] a = (byte[][]) obj.AttributeData;
// byte[][] a = obj.AttributeData; // same error
最后一行出现的错误如下
RuntimeBinderException 未处理
未处理的类型异常 'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException' 发生在 System.Core.dll
附加信息:无法隐式转换类型 'System.Collections.Generic.List' 到 'byte[][]'
问题
如何在 C# 中正确解码 JSON 中的二维 Array[][]?
供您参考,C# 服务器代码如下所示:
byte[][] attributes = null;
if (attributes == null)
{
// Evaluate the client proposed attributes and add demo data in certain circumstances
List<byte[]> attList = new List<byte[]>();
for (int i = 0; i < ikap.IssuerParameters.E.Length; i++)
{
attList.Add(encoding.GetBytes("Attribute" + i));
}
attributes = attList.ToArray();
}
//
// snip.. .firstMessage is a JSONString that we are appending to using this awkward method
//
dynamic obj = JsonConvert.DeserializeObject<ExpandoObject>(firstMessage, converter);
obj.sid = "this is the new session id";
obj.ti = "TokenData";
obj.NumberOfTokens = 5;
obj.AttributeData = attributes;
// Returning the JSON as a stream so that .NET WCF doesn't escape the raw JSON we're sending.
return returnAsStream(JsonConvert.SerializeObject(obj));
【问题讨论】:
-
尝试按照错误提示将其转换为列表,并在调试器中检查对象。
-
hmm...试图弄清楚如何使用
dynamic对象
标签: c# javascript json wcf json.net