从C#二维字节[]到JSON.NET再到C#字节[]或Javascript等效失败
我需要将字节[]从C#WCF Web服务发送到JSON客户端 原始WCF结果如下(在倒数第二行中查找从C#二维字节[]到JSON.NET再到C#字节[]或Javascript等效失败,c#,javascript,json,wcf,json.net,C#,Javascript,Json,Wcf,Json.net,我需要将字节[]从C#WCF Web服务发送到JSON客户端 原始WCF结果如下(在倒数第二行中查找AttributeData): {“sa”:[“bctvgtmz5zcch34szcsqrwq3b7qvxsipe57vj7yz/TwDNO+V3UkMr6wZKn8Fiu9+/YNG0iESAKz4EcbimeLzQU=”,“BHez/TgkoKbRwTu/lqS18h1hagY9N9j6/+czhuhachpkptgsomoznozdinkdr7j6m+1vaqrtcrvc2qfi4qf6nf
AttributeData
):
{“sa”:[“bctvgtmz5zcch34szcsqrwq3b7qvxsipe57vj7yz/TwDNO+V3UkMr6wZKn8Fiu9+/YNG0iESAKz4EcbimeLzQU=”,“BHez/TgkoKbRwTu/lqS18h1hagY9N9j6/+czhuhachpkptgsomoznozdinkdr7j6m+1vaqrtcrvc2qfi4qf6nfe0brq=”,“bl4dnzqmqmv/kLa5n+lviuzizz2bsk2bsjbjjjjjjjw9wjjjjjjjjjw9nerjjjw9w9wjjjjjjjjjjjjjjjjjjjjjj,“BPdEcJW8iVB74Cvxm720vVwxDnbVTm/JRKZ5VPB12JOXTLTCTO7WH9IEMQG9OARVGDJTEVMVIF09TVTAT7ULS=”,“BFOZJJJJJJRURGN8PQSZEKRUOVMYBTFUJ5UITG563RH08POUKBRCFGLYLUYZEV8M94H1FCV+Zg8i1PI0vWkgOEmlM=”,“sb:”,“sb:[“BNTHLQWFZKFN/gFhQ+XAWFHQ+XAWFUONLZHBXUC1UMTQPTRK5F5F5FZK5FK5FZK5FZK5FZK5FZZKKKK5FZZZKKKKKKKKKKBL6NBGy6vzJmPOJKu+WMQffLvnYw8gA+7ZYiANTOP+/5YPVELHSUVA9OXS6CUGSYVSAJIAKV96ZBVAYP9/2D0=“,”Bewruo7QXBPH68LEK7QTXAF064FBE8KTPY8MQFCAAZ/nB10IHMnKBSdiU+nwNhnSnbc7zCsDSzA825iDQLv9yU=“,”BIJYfLEMeF+V6IG9jZBcEP4vp0FhEejX46uEup/LY890NQEJFYFYFYFYF4FYUEGZYUG0F=“,”,”BYUKZYUKZZYUKZYUYUYLZZZYUYL0TBMwBbG/n3ylmxyo3wbxe6nODXyvJ0VpldnRZ6Wgpkn7CVcJMyXTMmhv5rxwwshq5Wbt6tFA4c3Bwy284KAAj5yI=“”,“sz:“bn39atet17jdki02lcer5eqprs2n3f1q2te+BTDNY/hulco8gu3hhgpvx7/kPN7KmHBJlmqniKBxx5nOcXwE=“”
“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
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));
var converter=新的ExpandoObjectConverter();
dynamic obj=JsonConvert.DeserializeObject(dataJsonAsListedAbove,converter);
字节[][]a=(字节[][])obj.AttributeData;
//字节[][]a=obj.AttributeData;//相同错误
最后一行出现的错误如下所示
RuntimeBinderException未处理
类型的未处理异常
中出现“Microsoft.CSharp.RuntimeBinder.RuntimeBinderException”
System.Core.dll
其他信息:无法隐式转换类型
“System.Collections.Generic.List”到“byte[]”
问题
如何从C#中的JSON正确解码二维数组[][]
供参考,C#服务器代码如下所示:
var converter = new ExpandoObjectConverter();
dynamic obj = JsonConvert.DeserializeObject<ExpandoObject>(dataJsonAsListedAbove, converter);
byte[][] a = (byte[][]) obj.AttributeData;
// byte[][] a = obj.AttributeData; // same error
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));
byte[][]属性=null;
如果(属性==null)
{
//评估客户建议的属性,并在特定情况下添加演示数据
List attList=新列表();
对于(int i=0;i
我在你的json中没有看到任何二维数组
var obj = JsonConvert.DeserializeObject<AClass>(DATA);
foreach (var data in obj.AttributeData)
{
var buf = Convert.FromBase64String(data);
Console.WriteLine(Encoding.UTF8.GetString(buf));
}
var obj=JsonConvert.DeserializeObject(数据);
foreach(对象属性数据中的var数据)
{
var buf=Convert.FromBase64String(数据);
Console.WriteLine(Encoding.UTF8.GetString(buf));
}
公共类AClass
{
公共列表sa{get;set;}
公共列表sb{get;set;}
公共字符串sz{get;set;}
公共字符串sid{get;set;}
公共字符串ti{get;set;}
public int NumberOfTokens{get;set;}
公共列表属性数据{get;set;}
}
尝试将其转换为错误提示的列表,并在调试器中检查对象。嗯……尝试找出如何使用动态
对象看起来像是Json.NET将字节[]转换为List@makerofthings7这没有任何意义。没有字节[][]在json数据中。是否显示序列化以生成json的类?我刚刚回滚编辑以显示服务器上有一个字节[],如您所述