{"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全是空的,没有用户的那些属性了。。请教高手怎么做呢?

解决方案 »

  1.   

    System.Runtime.Serialization.Json;public class JsonHelper  
    {  
        /// <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;  
        }  
    }
      

  2.   


    你自己都不知道如何标记一个有点属性内涵的类型,别人也帮不上你的忙。告诉你一个结果(也许你根本听不进去),不是什么反序列化为object。你想得到userName,那么你就要反序列化为一个有userName属性(或者字段)定义的类型中。其它属性也一样。
      

  3.   

    在设计问题上,你还是处在一个糊涂状态下。设计一个跟flex协同的程序,首先去了解这个程序跟你都通讯什么具体类型的数据。而不是搞什么空洞的object就完了。
      

  4.   

    p哥说得对
    如果不改动要取值的话可以用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
    */