[英]C# 2 dimensional byte[][] to JSON.NET to C# byte[][] or Javascript equivalant fails
我需要將字節[] []從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 / kPN7KmH BJlmqniKBxx5nOcXwE =”,
“ 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未處理
System.Core.dll中發生了類型為“ Microsoft.CSharp.RuntimeBinder.RuntimeBinderException”的未處理異常
附加信息:無法將類型'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));
我在您的json中沒有看到任何二維數組...
var obj = JsonConvert.DeserializeObject<AClass>(DATA);
foreach (var data in obj.AttributeData)
{
var buf = Convert.FromBase64String(data);
Console.WriteLine(Encoding.UTF8.GetString(buf));
}
public class AClass
{
public List<string> sa { get; set; }
public List<string> sb { get; set; }
public string sz { get; set; }
public string sid { get; set; }
public string ti { get; set; }
public int NumberOfTokens { get; set; }
public List<string> AttributeData { get; set; }
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.