{"MeseageTo":[],"obj":[{"age":20,"sex":"男","userName":"aaa"},{"age":20,"sex":"男","userName":"aaa"},{"age":20,"sex":"男","userName":"aaa"}],"MessageFrom":"sss","MessageType":2,"sessionID":"","time":""}这个是flex客户端传来的json字符串,现在要求c#服务端用json反序列化成object类型。不要跟我说什么泛型啥的,或者指定类型啥的。客户端传来的obj属性有可能是任何类型,包括复杂的对象集合。还有即使我能通过类型判断选择用不同的对象来接收,但问题是,queue只允许一种对象望里压。我测试的结果是用object对象得到obj属性后,结果成了object[],里边包含了几个object,但是里边的 object全是空的,没有用户的那些属性了。。请教高手怎么做呢?
{
/// <summary>
/// JSON序列化
/// </summary>
public static string JsonSerializer<T>(T t)
{
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
MemoryStream ms = new MemoryStream();
ser.WriteObject(ms, t);
string jsonString = Encoding.UTF8.GetString(ms.ToArray());
ms.Close();
return jsonString;
}
/// <summary>
/// JSON反序列化
/// </summary>
public static T JsonDeserialize<T>(string jsonString)
{
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));
T obj = (T)ser.ReadObject(ms);
return obj;
}
}
你自己都不知道如何标记一个有点属性内涵的类型,别人也帮不上你的忙。告诉你一个结果(也许你根本听不进去),不是什么反序列化为object。你想得到userName,那么你就要反序列化为一个有userName属性(或者字段)定义的类型中。其它属性也一样。
如果不改动要取值的话可以用Newtonsoft.Json.dllstring str = @"{""MeseageTo"":[],""obj"":[{""age"":20,""sex"":""男"",""userName"":""aaa""},
{""age"":20,""sex"":""男"",""userName"":""bbb""}],""MessageFrom"":""sss"",""MessageType"":2,""sessionID"":"""",""time"":""""}";
JavaScriptObject obj = (JavaScriptObject)JavaScriptConvert.DeserializeObject(str);
JavaScriptArray array = (JavaScriptArray)obj["obj"];
foreach (JavaScriptObject o in array)
Console.WriteLine(o["userName"]);
Console.WriteLine(obj["MessageFrom"].ToString());
Console.ReadLine();
/*
aaa
bbb
sss
*/