0

I have tried to convert my mysql table data to json string. while creating object for Serialize, I can't get the List values as object

** Sample Json String -**

{"accessKey":"7eb228097576abf56968e9845ab51b90","channelId":"103","hotels":[{"hotelId":"2","rooms":[{"roomId":"1","availability":[{"date":"2014-06-06","free":1}]}]}]}

C# Classes-

public class Availability
        {
            public string date { get; set; }
            public int free { get; set; }
        }

        public class Room
        {
            public string roomId { get; set; }
            public List<Availability> availability { get; set; }
        }

        public class Hotel
        {
            public string hotelId { get; set; }
            public List<Room> rooms { get; set; }
        }

        public class RootObject
        {
            public string accessKey { get; set; }
            public string channelId { get; set; }
            public List<Hotel> hotels { get; set; }
        }

My SQL Table -

enter image description here

Serialize Function -

public string cc()
{

string s = "";
RootObject ro = new RootObject();
ro.accessKey = "7eb228097576abf56968e9845ab51b90";
ro.channelId = "103";
ro.hotels = new List<Hotel>();   
ro.hotels. // Here I want to access the room list. But I can't get


Hotel h = new Hotel();

string config = "server=localhost;username=mcubic;password=mcs@2011$;database=test";

MySqlConnection connection = new MySqlConnection(config);

string query = "select * from test1";

MySqlCommand command = new MySqlCommand(query, connection);
connection.Open();
MySqlDataReader Reader = command.ExecuteReader();
while (Reader.Read())
{            
    h.hotelId = Reader[1].ToString();
}
connection.Close();

ro.hotels.Add(h);
JavaScriptSerializer js = new JavaScriptSerializer();
s = js.Serialize(ro);

return s;
}

EDIT 1 -

I got availability, Room and root object. so i got three json strings. now i want to include the three jsons as one json string.

object 1 - ro Object 2 - h Object 3 - r

  • {"date":"2014-06-07","free":1}
  • {"roomId":"3","availability":null}
  • {"accessKey":"7eb228097576abf56968e9845ab51b90","channelId":"103","hotels":[{"hotelId":"1","rooms":null}]}

Now I want to merge these jsons string. How can i do this?

    public string cc()
    {

    string s = "";
    RootObject ro = new RootObject(); // First Object 
    ro.accessKey = "7eb228097576abf56968e9845ab51b90";
    ro.channelId = "103";
    ro.hotels = new List<Hotel>();        

    //List<Hotel> hotel = new List<Hotel>();
    //List<Room> r = new List<Room>();

    Hotel h = new Hotel(); // 2nd Object
    Room r = new Room(); // 3rd object
    Availability a = new Availability();

    string config = "server=localhost;username=mcubic;password=mcs@2011$;database=test";

    MySqlConnection connection = new MySqlConnection(config);

    string query = "select * from test1";

    MySqlCommand command = new MySqlCommand(query, connection);
    connection.Open();
    MySqlDataReader Reader = command.ExecuteReader();
    while (Reader.Read())
    {
        a.date = Reader[3].ToString();
        a.free = Convert.ToInt32(Reader[4].ToString());
    }
    connection.Close();

    query = "select * from test1";

    command = new MySqlCommand(query, connection);
    connection.Open();
    Reader = command.ExecuteReader();
    while (Reader.Read())
    {
        r.roomId = Reader[2].ToString();
    }
    connection.Close();

    query = "select * from test1";

    command = new MySqlCommand(query, connection);
    connection.Open();
    Reader = command.ExecuteReader();
    while (Reader.Read())
    {
        h.hotelId = Reader[1].ToString();
    }
    connection.Close();

    r.availability.Add(a); // Object reference not set to an instance of an object Error
    //h.rooms.Add(r);

    ro.hotels.Add(h);

    JavaScriptSerializer js = new JavaScriptSerializer();
    s = js.Serialize(a); // Output - {"date":"2014-06-07","free":1}
    s = js.Serialize(r); // Output -  {"roomId":"3","availability":null}
    s = js.Serialize(ro); // Output - {"accessKey":"7eb228097576abf56968e9845ab51b90","channelId":"103","hotels":[{"hotelId":"1","rooms":null}]}

    return s;
    }
}
Sagotharan
  • 2,586
  • 16
  • 73
  • 117
  • Why ask same question twice? http://stackoverflow.com/questions/24360849/object-reference-not-set-error-in-json-serialize-in-lists/ – Mikko Viitala Jun 23 '14 at 08:06

1 Answers1

0

You could use NewtonSoft.Json to serialize

Example:

var jsonString = JsonConvert.SerializeObject(ro);

returns:

{"accessKey":"7eb228097576abf56968e9845ab51b90","channelId":"103","hotels":[{"hotelId":"2","rooms":[{"roomId":"1","availability":[{"date":"2014-06-06","free":1}]}]}]}
sa_ddam213
  • 42,848
  • 7
  • 101
  • 110