-1

I'm trying to deserialized the following json response in c#.

Response:

{ "status": true, "message": "success", "data": [ { "message": "MSISDN: 01120511377\nLine Status: ACTIVE\nPlan: B149\n\nBlack Counter: 45 GB 643m, 900sms\nLyt: 158\n\nAdditional Usage: RM80.00\n" }, { "message": "\nCURRENT CHARGES\nMonthly Charges : RM149.00\nAdditional Usage : RM80.00\n\nTotal Amount Due: RM-158.00" } ] }

I managed to get status and message, but unable to get the data array.

These are my classes:

[DataContract]
public class RecMessage
{
    [DataMember]
    public string status { get; set; }
    [DataMember]
    public string message { get; set; }
    [DataMember]
    public message data { get; set; }
}
[DataContract]
public class message
{
    [DataMember]
    public string messages { get; set; }
}

However, data->messages is always null

UPDATE: SOLVED!!

The classes supposed be like this:

[DataContract]

public class RecMessage
{
    [DataMember]
    public string status { get; set; }
    [DataMember]
    public string message { get; set; }
    [DataMember]
    public messages[] data { get; set; }
}
[DataContract]
public class messages
{
    [DataMember]
    public string message { get; set; }
}
zach
  • 65
  • 7
  • try [DataMember] public List data { get; set; } as its a collection of messages. – prashant Jan 18 '18 at 00:50
  • You have a typo in the message class as the property is also named `message` while you have it as `messages` so it wont map. Also data is a message array `message[]` – Nkosi Jan 18 '18 at 00:53
  • Possible duplicate of [Deserialize JSON into C# dynamic object?](https://stackoverflow.com/questions/3142495/deserialize-json-into-c-sharp-dynamic-object) – Baddack Jan 18 '18 at 00:57

2 Answers2

1

Your classes should look something like this:

public class RecMessage
{
    public bool Status { get; set; }
    public string Message { get; set; }
    public List<MessageContent> Data { get; set; }
}

public class MessageContent
{
    public string Message { get; set; }
}

And, using JSON.Net to deserialise:

var json = "{...}";
var recMessage = JsonConvert.DeserializeObject<RecMessage>(json);
DavidG
  • 113,891
  • 12
  • 217
  • 223
0

First change this:

Before: public message data { get; set; }

After: public List<message> data { get; set; }

Here are c# functions I use to serialize/deserialize. It requires Json.net.

public static string ToJSON(this Object obj)
{
    return JsonConvert.SerializeObject(obj);
}

public static T FromJSON<T>(string jsonData)
{
    return JsonConvert.DeserializeObject<T>(jsonData);
}

You would use it like this:

RecMessage myMessage = FromJson<RecMessage>(jsonString)

Simcha Khabinsky
  • 1,970
  • 2
  • 19
  • 34