现在JSON如下:{"id":"222332","moreinfo":"{"info1":"haha","info2":"heihei"}"}那么我定义如下类
<DataContract()> _
Public Class MainClass    Private _ID As String    Private _MoreInfo As MoreInfoClass    <DataMember(Name:="id")> _
    Property ID() As Integer
        Get
            Return _ID
        End Get
        Set(ByVal value As Integer)
            _ID = value
        End Set
    End Property    <DataMember(Name:="moreinfo")> _
    Property MoreInfo() As MoreInfoClass
        Get
            Return _MoreInfo
        End Get
        Set(ByVal value As MoreInfoClass)
            _MoreInfo = value
        End Set
    End Property    Public Sub New()
        _ID = ""
        _MoreInfo = New MoreInfoClass
    End SubEnd Class<DataContract()> _
Public Class MoreInfoClass    Private _Info1 As String    Private _Info2 As String    <DataMember(Name:="info1")> _
    Property Info1() As String
        Get
            Return _Info1
        End Get
        Set(ByVal value As String)
            _Info1 = value
        End Set
    End Property    <DataMember(Name:="info2")> _
    Property Info2() As String
        Get
            Return _Info2
        End Get
        Set(ByVal value As String)
            _Info2 = value
        End Set
    End Property    Public Sub New()
        _Info1 = ""
        _Info2 = ""
    End Sub
End Class
两个类反序列化代码如下
Dim JsonString as String="最上面的JSON"
Dim JsonSerializer As New DataContractJsonSerializer(GetType(MainClass))
Dim Stream As New MemoryStream(Encoding.UTF8.GetBytes(JsonString))
Dim TempReturn As MainClass = JsonSerializer.ReadObject(Stream)为什么总是出现应为状态“Element”。。遇到名称为“”、命名空间为“”的“Text”。 这样的错误是不是里面嵌套一个类后,定义方法不一样还是怎么的,谁知道呢?????

解决方案 »

  1.   

    我还以为是C#的……看不懂VB……请转为C#再贴上来……
      

  2.   

    这几句代码很简单的啊,就是2个类
    还有一段反序列化代码就是想寻求复杂JSON使用DataContractJsonSerializer反序列化的已有解决方案,这个是我自己写的
      

  3.   

    不是,因为VB语言有其自己的特色……所以有些问题是VB独有的,虽然都是net平台下的语言……你贴出来的是简单,没看出有什么不妥的……能力有限……能力有限……
      

  4.   

    DataContractJsonSerializer不能实现复杂类型的反序列化。有两种替代方案。
    1)拼接法,这个比较麻烦。
    2)第三方库
    Newtonsoft.Json.JavaScriptConvert.DeserializeObject
    可用来把JSON字符串转成实体,而且非常简单。
      

  5.   

    下午花了点时间研究了一下,发现上面回答错了.
    其实DataContractJsonSerializer的方案是最佳的.
    试着反序列化了一下开心网的数据,效果不错.
    连字符转义和UNICODE都自动解决了,这个要好于Newtonsoft库.            //--------json/test/userdata-------
                string strUserData = ContentHelper.GetMidString(HTML, "v_userdata = ", ";");
                jsr = new DataContractJsonSerializer(typeof(UserData));
                ms = new MemoryStream(Encoding.UTF8.GetBytes(strUserData));
                UserData userData = (UserData)jsr.ReadObject(ms);            Console.WriteLine("ERROR:{0}", userData.Error);
                Console.WriteLine();            Console.WriteLine("CONFIG MIN:{0}", userData.Config.money_minute);
                Console.WriteLine("CONFIG MAX:{0}", userData.Config.money_max);
                Console.WriteLine();            Console.WriteLine("ParKing ID [0]:{0}", userData.Parking[0].parkid);
                Console.WriteLine("ParKing ID [1]:{0}", userData.Parking[1].parkid);
                Console.WriteLine();            Console.WriteLine("VUID:{0}", userData.User.vuid);
                Console.WriteLine("UID:{0}", userData.User.uid);
                Console.WriteLine("Neighbor:{0}", userData.User.neighbor);
                Console.WriteLine("IsFriend:{0}", userData.User.isfriend);
                Console.WriteLine("FirstFeeParking:{0}", userData.User.first_fee_parking);
                Console.WriteLine("FirstFreeParking:{0}", userData.User.first_free_parking);
                Console.WriteLine("RealName:{0}", userData.User.real_name);
                Console.WriteLine("Ta:{0}", userData.User.ta);
                Console.WriteLine("Logo50:{0}", userData.User.logo50);
                Console.WriteLine("Logo20:{0}", userData.User.logo20);
                Console.WriteLine("Avenue:{0}", userData.User.avenue);
                Console.WriteLine("Cash:{0}", userData.User.cash);
                Console.WriteLine("Scene:{0}", userData.User.scene);
                Console.WriteLine("Sceneid:{0}", userData.User.sceneid);
                Console.WriteLine("Showmoneyminute:{0}", userData.User.showmoneyminute);
                Console.WriteLine("Online2:{0}", userData.User.online2);
                Console.WriteLine();            string strFriendData = ContentHelper.GetMidString(HTML, "v_frienddata = ", ";");
                //strFriendData = "{\"friend\":" + strFriendData + "}";
                jsr = new DataContractJsonSerializer(typeof(Friend[]));
                ms = new MemoryStream(Encoding.UTF8.GetBytes(strFriendData));
                Friend[] friendData = (Friend[])jsr.ReadObject(ms);            Console.WriteLine("uid:{0}", friendData[0].uid);
                Console.WriteLine("uid:{0}", friendData[0].real_name);
                Console.WriteLine("uid:{0}", friendData[0].ta);
                Console.WriteLine("uid:{0}", friendData[0].full);
                Console.WriteLine("uid:{0}", friendData[0].scenemoney);
                Console.WriteLine("uid:{0}", friendData[0].scenename);
                Console.WriteLine("uid:{0}", friendData[0].neighbor);
                Console.WriteLine("uid:{0}", friendData[0].online);            jsr = null;
                ms = null;
      

  6.   

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Runtime.Serialization;namespace pcTest.Kaixin001.Entity
    {
        //money_minute
        //money_max
        [DataContract]
        class Config
        {
            [DataMember(Name = "money_minute")]
            public string money_minute { get; set; }        [DataMember(Name = "money_max")]
            public string money_max { get; set; }    }
        
        //vuid
        //uid
        //neighbor
        //isfriend
        //first_fee_parking
        //first_free_parking
        //real_name
        //ta
        //logo50
        //logo20
        //avenue
        //cash
        //scene
        //sceneid
        //showmoneyminute
        //online2
        [DataContract]
        class User
        {
            [DataMember(Name = "vuid")]
            public string vuid { get; set; }        [DataMember(Name = "uid")]
            public string uid { get; set; }        [DataMember(Name = "neighbor")]
            public string neighbor { get; set; }        [DataMember(Name = "isfriend")]
            public string isfriend { get; set; }        [DataMember(Name = "first_fee_parking")]
            public string first_fee_parking { get; set; }        [DataMember(Name = "first_free_parking")]
            public string first_free_parking { get; set; }        [DataMember(Name = "real_name")]
            public string real_name { get; set; }        [DataMember(Name = "ta")]
            public string ta { get; set; }        [DataMember(Name = "logo50")]
            public string logo50 { get; set; }        [DataMember(Name = "logo20")]
            public string logo20 { get; set; }        [DataMember(Name = "avenue")]
            public string avenue { get; set; }        [DataMember(Name = "cash")]
            public string cash { get; set; }        [DataMember(Name = "scene")]
            public string scene { get; set; }        [DataMember(Name = "sceneid")]
            public string sceneid { get; set; }        [DataMember(Name = "showmoneyminute")]
            public string showmoneyminute { get; set; }        [DataMember(Name = "online2")]
            public string online2 { get; set; }    }    //parkid
        //car_uid
        //carid
        //ctime
        //car_real_name
        //car_logo20
        //car_isfriend
        //car_logo_big
        //car_logo_small
        //car_logo_flash
        //car_police
        //car_profit
        //car_trade
        //car_tradename
        //car_price
        //car_name
        [DataContract]
        class Parking
        {
            [DataMember(Name = "parkid")]
            public string parkid { get; set; }        [DataMember(Name = "car_uid")]
            public string car_uid { get; set; }        [DataMember(Name = "carid")]
            public string carid { get; set; }        [DataMember(Name = "ctime")]
            public string ctime { get; set; }        [DataMember(Name = "car_real_name")]
            public string car_real_name { get; set; }        [DataMember(Name = "car_logo20")]
            public string car_logo20 { get; set; }        [DataMember(Name = "car_isfriend")]
            public string car_isfriend { get; set; }        [DataMember(Name = "car_logo_big")]
            public string car_logo_big { get; set; }        [DataMember(Name = "car_logo_small")]
            public string car_logo_small { get; set; }        [DataMember(Name = "car_logo_flash")]
            public string car_logo_flash { get; set; }        [DataMember(Name = "car_police")]
            public string car_police { get; set; }        [DataMember(Name = "car_profit")]
            public string car_profit { get; set; }        [DataMember(Name = "car_trade")]
            public string car_trade { get; set; }        [DataMember(Name = "car_tradename")]
            public string car_tradename { get; set; }        [DataMember(Name = "car_price")]
            public string car_price { get; set; }        [DataMember(Name = "car_name")]
            public string car_name { get; set; }    }    //carid
        //price
        //neighbor
        //park_uid
        //parkid
        //ctime
        //car_name
        //car_logo_big
        //car_logo_small
        //car_logo_flash
        //car_trade
        //car_tradename
        //car_police
        //park_real_name
        //park_logo20
        //park_profit
        //park_moneyminute
        [DataContract]
        class Car
        {
            [DataMember(Name = "carid")]
            public string carid { get; set; }        [DataMember(Name = "price")]
            public string price { get; set; }        [DataMember(Name = "neighbor")]
            public string neighbor { get; set; }        [DataMember(Name = "park_uid")]
            public string park_uid { get; set; }        [DataMember(Name = "parkid")]
            public string parkid { get; set; }        [DataMember(Name = "ctime")]
            public string ctime { get; set; }        [DataMember(Name = "car_name")]
            public string car_name { get; set; }        [DataMember(Name = "car_logo_big")]
            public string car_logo_big { get; set; }        [DataMember(Name = "car_logo_small")]
            public string car_logo_small { get; set; }        [DataMember(Name = "car_logo_flash")]
            public string car_logo_flash { get; set; }        [DataMember(Name = "car_trade")]
            public string car_trade { get; set; }        [DataMember(Name = "car_tradename")]
            public string car_tradename { get; set; }        [DataMember(Name = "car_police")]
            public string car_police { get; set; }        [DataMember(Name = "park_real_name")]
            public string park_real_name { get; set; }        [DataMember(Name = "park_logo20")]
            public string park_logo20 { get; set; }        [DataMember(Name = "park_profit")]
            public string park_profit { get; set; }        [DataMember(Name = "park_moneyminute")]
            public string park_moneyminute { get; set; }    }    //error
        //config
        //user[]
        //parking[]
        //car[]
        [DataContract]
        class UserData
        {
            [DataMember(Name = "error")]
            public string Error { get; set; }        [DataMember(Name = "config")]
            public Config Config { get; set; }        [DataMember(Name = "user")]
            public User User { get; set; }        [DataMember(Name = "parking")]
            public Parking[] Parking { get; set; }        [DataMember(Name = "car")]
            public Car[] Car { get; set; }    }
    }using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Runtime.Serialization;namespace pcTest.Kaixin001.Entity
    {
        //uid
        //real_name
        //ta
        //full
        //scenemoney
        //scenename
        //neighbor
        //online
        [DataContract]
        class Friend
        {
            [DataMember(Name = "uid")]
            public string uid { get; set; }        [DataMember(Name = "real_name")]
            public string real_name { get; set; }        [DataMember(Name = "ta")]
            public string ta { get; set; }        [DataMember(Name = "full")]
            public string full { get; set; }        [DataMember(Name = "scenemoney")]
            public string scenemoney { get; set; }        [DataMember(Name = "scenename")]
            public string scenename { get; set; }        [DataMember(Name = "neighbor")]
            public string neighbor { get; set; }        [DataMember(Name = "online")]
            public string online { get; set; }    }
    }