簡體   English   中英

C#二維byte [] []到JSON.NET到C#byte [] []或Javascript等效項失敗

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM