gpt4 book ai didi

C# 2 维 byte[][] 到 JSON.NET 到 C# byte[][] 或 Javascript 等效项失败

转载 作者:行者123 更新时间:2023-12-03 12:12:31 25 4
gpt4 key购买 nike

我需要将 byte[][] 从 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/kPN7KmHBJlmqniKBxx5nOcXwE=",

"sid":"this is the new session 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”发生在 系统.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));

最佳答案

我在你的 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; }
}

关于C# 2 维 byte[][] 到 JSON.NET 到 C# byte[][] 或 Javascript 等效项失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24893719/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com