Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# can';t反序列化JSON是否正确_C#_.net_Json_Datacontractserializer - Fatal编程技术网

C# can';t反序列化JSON是否正确

C# can';t反序列化JSON是否正确,c#,.net,json,datacontractserializer,C#,.net,Json,Datacontractserializer,我有一节课 [DataContract] public class restaurant { public restaurant() {} public restaurant(string Address, string Description, int Id, float Latitude, float Longitude, string Name, string OpeningHours, string Phone,

我有一节课

[DataContract]
    public class restaurant
    {
        public restaurant() {}

        public restaurant(string Address, string Description, int Id, float Latitude, float Longitude, string Name,
            string OpeningHours, string Phone, string Sandwich, string Price, string UpdatedAt , string Website, float Score, int RatingCount, string ThumbnailUrl)
        {
            address = Address;
            description = Description;
            id = Id;
            latitude = Latitude;
            longitude = Longitude;
            name = Name;
            opening_hours = OpeningHours;
            phone = Phone;
            sandwich = Sandwich;
            price = Price;
            updated_at = UpdatedAt;
            website = Website;
            score = Score;
            rating_count = RatingCount;
            thumbnail_url = ThumbnailUrl;

        }


        [DataMember]
        public string address { get; set; }
        [DataMember]
        public string description { get; set; }
        [DataMember]
        public int id { get; set; }
        [DataMember]
        public float latitude { get; set; }
        [DataMember]
        public float longitude { get; set; }
        [DataMember]
        public string name { get; set; }
        [DataMember]
        public string opening_hours { get; set; }
        [DataMember]
        public string phone { get; set; }
        [DataMember]
        public string sandwich { get; set; }
        [DataMember]
        public string price { get; set; }
        [DataMember]
        public string updated_at { get; set; }
        [DataMember]
        public string website { get; set; }
        [DataMember]
        public float score { get; set; }
        [DataMember]
        public int rating_count { get; set; }
        [DataMember]
        public string thumbnail_url { get; set; }

    }
和一个JSON字符串:

string json = @"{""restaurant"":{""address"":""blablabla"",""description"":""blablabla"",""id"":6,""latitude"":12.1,""longitude"":-12.3,
                                    ""name"":""blablabla"",""opening_hours"":""Mon-Fri: 12pm-2:30pm\r\n                  6:30pm-11pm \r\nSat: 12-3:30pm/6:30-11pm \r\nSun: 12-9pm"",""phone"":""123456"",""price"":""1"", ""sandwich"":""blablabla"",""updated_at"":""2011-10-10T21:40:17Z"",
                                    ""website"":""blablabla"",""score"":4.3,""ratings_count"":3,""thumbnail_url"":""http://website.com/1.jpg""}}";
我正在尝试使用以下代码反序列化:

restaurant LR;

            using (MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(json)))
            {
                DataContractJsonSerializer serializer =
                        new DataContractJsonSerializer(typeof(restaurant));

                LR= (restaurant)serializer.ReadObject(ms);
            }

但它不起作用!奇怪的是,当我尝试反序列化它时,它没有显示错误(因此json是好的,如果我故意把json搞砸,它会在运行时显示错误),但餐厅对象是空的。我做错了什么?

根据您的餐厅类,我认为这是json,可以通过您的代码进行反序列化:

string json = @"{""address"":""blablabla"",""description"":""blablabla"",""id"":6,""latitude"":12.1,""longitude"":-12.3,
                                ""name"":""blablabla"",""opening_hours"":""Mon-Fri: 12pm-2:30pm\r\n                  6:30pm-11pm \r\nSat: 12-3:30pm/6:30-11pm \r\nSun: 12-9pm"",""phone"":""123456"",""price"":""1"", ""sandwich"":""blablabla"",""updated_at"":""2011-10-10T21:40:17Z"",
                                ""website"":""blablabla"",""score"":4.3,""ratings_count"":3,""thumbnail_url"":""http://website.com/1.jpg""}";
不过我不能谈论日期。有时他们会因为文化的原因而呕吐

EDIT:要使其序列化json,可以创建一个外部类rest。像

public class rest
{
    public restaurant restaurant { get; set; }
}
然后,反序列化代码也需要更改为:

rest LR;

using (MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(json)))
{
    DataContractJsonSerializer serializer =
                    new DataContractJsonSerializer(typeof(rest));

    LR = (rest)serializer.ReadObject(ms);
}
大音符 如果你能容纳许多[餐厅]的话

{"restaurant":[{""address"":"blah1", ...}, {""address"":"blah2", ...}]}
,则您可能需要将成员餐厅内部休息类设置为数组,如下所示:

public class rest
{
    public restaurant[] restaurant { get; set; }
}

成功了!谢谢如何修改代码,使反序列化程序将json反序列化?json是外部的,所以我不能修改它!你能帮忙吗?@BadescuAlexandru:我编辑了我的答案,向你展示了如何处理jsonbtw,如果我的json类似于[{“餐厅”:{“地址”:“blah1”,…},restraurant:{“地址”:“blah2”,…}],我该怎么做?更改rest-LR;休息[]LR;然后从typeof(rest)到typeof(rest[])和LR=(rest)serializer.ReadObject(ms)到LR=(rest[])serializer.ReadObject(ms)@BadescuAlexandru:你确定你的JSON格式正确吗。类似于以下的代码段应该使用我发布的代码正确地反序列化:[{“餐厅”:{“地址”:“blah1”,“…}},{“餐厅”:{“地址”:“blah2”,“…}}]。确保支架正确匹配。{“餐厅”:{“地址”:“blah1”…}包含一个完整的餐厅对象。注意最后两个}}。第一个关闭内部{,另一个关闭“餐厅”前的{