jinesh sam Ответов: 3

Как преобразовать строку Json в список объектов


Привет Друзья,

у меня есть строка JSON. Мне нужно преобразовать его в список объектов. Как я могу это сделать?
Я создал класс для этого.Ниже приведены подробности. пожалуйста помочь
string Restresponse = string.Empty;
Restresponse = reader.ReadToEnd();
JObject json = JObject.Parse(Restresponse);


class Plans
   {
       public string AssumptionsOverrides { get; set; }
       public string ChannelId { get; set; }
       public string Clients { get; set; }
       public string CreatedDate { get; set; }
       public string CustomAssetClasses { get; set; }
       public string FaNumber { get; set; }
       public string Href { get; set; }
       public string LastAnalysisDate { get; set; }
       public string Name { get; set; }
       public string OfficeNumber { get; set; }
       public string PlanId { get; set; }
       public string Scenarios { get; set; }
       public string Settings { get; set; }
       public string UpdatedDate { get; set; }
       public string VerificationTimestamp { get; set; }

   }


{
	"plans": [{
		"planId": 10001,
		"name": "My Client Plan 1",
		"href": null,
		"channelId": "WSGPLN",
		"officeNumber": 101,
		"faNumber": 195,
		"createdDate": "2016-01-27T15:43:50",
		"updatedDate": "2016-01-27T15:43:50",
		"lastAnalysisDate": null,
		"clients": null,
		"scenarios": null,
		"settings": null,
		"assumptionsOverrides": null,
		"customAssetClasses": null,
		"verificationTimestamp": "2016-01-27T15:43:50"
	},
{
		"planId": 10025,
		"name": "My Client Plan 25",
		"href": null,
		"channelId": "WSGPLN",
		"officeNumber": 101,
		"faNumber": 195,
		"createdDate": "2016-01-27T15:43:50",
		"updatedDate": "2016-01-27T15:43:50",
		"lastAnalysisDate": null,
		"clients": null,
		"scenarios": null,
		"settings": null,
		"assumptionsOverrides": null,
		"customAssetClasses": null,
		"verificationTimestamp": "2016-01-27T15:43:50"
	}],
	"metadata": {
		"totalCount": 25,
		"offset": null,
		"limit": null
	}
}

BillWoodruff

Вам нужно де-сериализовать JSON в экземпляр вашего объекта класса.

Есть ли у вас доступ к коду, из которого был сериализован JSON, чтобы вы могли изучить структуру исходного класса ?

jinesh sam

Я попытался де-сериализовать, используя приведенный ниже код
Список<планов> P = JsonConvert.DeserializeObject<List>(Restresponse);
но это показывает ошибку. пожалуйста помочь

3 Ответов

Рейтинг:
5

Anil Sharma1983

вы можете попробовать этот способ

public class Plan
{
    public int planId { get; set; }
    public string name { get; set; }
    public object href { get; set; }
    public string channelId { get; set; }
    public int officeNumber { get; set; }
    public int faNumber { get; set; }
    public string createdDate { get; set; }
    public string updatedDate { get; set; }
    public object lastAnalysisDate { get; set; }
    public object clients { get; set; }
    public object scenarios { get; set; }
    public object settings { get; set; }
    public object assumptionsOverrides { get; set; }
    public object customAssetClasses { get; set; }
    public string verificationTimestamp { get; set; }
}

public class Metadata
{
    public int totalCount { get; set; }
    public object offset { get; set; }
    public object limit { get; set; }
}

public class RootObject
{
    public List<Plan> plans { get; set; }
    public Metadata metadata { get; set; }
}
//c# convert to objects
 string json = "your jsonstring";
            
            RootObject rootObject = new JavaScriptSerializer().Deserialize<rootobject>(json);

</rootobject>


jinesh sam

Спасибо Анил:) Ссылка System.Web.Extension должна быть добавлена и System.Web.Script.Пространство имен сериализации

Рейтинг:
2

Kornfeld Eliyahu Peter

Вероятно, лучшая библиотека для обработки JSON в .NET...
Json.NET - Newtonsoft[^]


jinesh sam

Спасибо :)
ты имеешь в виду что-то вроде этого.
Список<планов> P = JsonConvert.DeserializeObject в<список<планы&ГТ;&ГТ;(Restresponse);
Я получаю ошибку. не могли бы вы мне помочь

jinesh sam

Ошибка:
Невозможно десериализовать текущий объект JSON (например, {"name":"value"}) в тип 'System.Коллекции.Generic.List`1[CallingAService.Планы]' потому что для правильной десериализации типа требуется массив JSON (например, [1,2,3]).

Рейтинг:
1

F-ES Sitecore

JSON, который у вас есть, не соответствует классу, в который вы пытаетесь десериализоваться. Ваш JSON-это свойство, называемое "plans", то есть массив объектов, имеющих свойство planId и т. д. Класс, в который вы десериализуетесь, - это объект, имеющий свойство PlanID и т. д. Когда вы deserialise, что JSON в этом классе это будет выглядеть, чтобы положить в коллекцию в массив\список свойств под названием планах, но ваш класс план имеет такое свойство.

You're going to have to either change the JSON or change your classes. This code uses the System.Runtime.Serialization classes, which will also need you to add some attributes to your classes, not just to allow them to be serialised, but also to take care of the fact that the case of property in your JSON doesn't match that on your class (I've done this on PlanID and Name to give you an example and to test it works, you'd need to do the others yourself). If you use a library like the Newtonsoft one already mentioned I dare say you won't have these fiddly issues, you'll be able to use your classes without bothering about special annotations, I'm only using this method as it works out of the box.

Обновленные классы

[DataContract]
class Plans
{
    [DataMember]
    public List<Plan> plans { get; set; }
}

[DataContract]
class Plan
{
    [DataMember]
    public string AssumptionsOverrides { get; set; }
    [DataMember]
    public string ChannelId { get; set; }
    [DataMember]
    public string Clients { get; set; }
    [DataMember]
    public string CreatedDate { get; set; }
    [DataMember]
    public string CustomAssetClasses { get; set; }
    [DataMember]
    public string FaNumber { get; set; }
    [DataMember]
    public string Href { get; set; }
    [DataMember]
    public string LastAnalysisDate { get; set; }
    [DataMember(Name="name")]
    public string Name { get; set; }
    [DataMember]
    public string OfficeNumber { get; set; }
    [DataMember(Name="planId")]
    public string PlanId { get; set; }
    [DataMember]
    public string Scenarios { get; set; }
    [DataMember]
    public string Settings { get; set; }
    [DataMember]
    public string UpdatedDate { get; set; }
    [DataMember]
    public string VerificationTimestamp { get; set; }

}


Использование

string json = "{\"plans\": [{.... ";

MemoryStream ms = new MemoryStream(System.Text.ASCIIEncoding.ASCII.GetBytes(json));
ms.Position = 0;

// Needs a reference to "System.Runtime.Serialization"
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(Plans));
Plans p = (Plans) ser.ReadObject(ms);


ridoy

красиво, 5.