Simos Fasouliotis
Simos Fasouliotis

Reputation: 1390

C# for each property get both value and name

I'm sending a JSON object through PUT from angularJS to c#, which has a property name and a value.

I'm trying to loop for each property and read both name and the value, but it fails. I have succeed to read only the name or only the value though with the below code:

Newtonsoft.Json.Linq.JObject cbpcs = pricestopsale.cbPricegroups;
foreach (string pricegroupInfo in cbpcs.Properties().Select(p => p.Value).ToList())
{
   // I want to be able to do something like this inside here
   if(pricegroupInfo.Value == "Something") {
     // do stuff
   }
}

In my above example pricegroupInfo has the value, if i change .Select(p => p.Name).ToList()) i get the name of the property.

What can I do if i want to get both name and value inside my loop ?

Update 1: The property Name is unknown to me, it's generated dynamically so I dont know in advance the property name.

Update 2: I want to be able to compare the value and the name as a string inside the loop.

Upvotes: 0

Views: 91

Answers (3)

Paritosh
Paritosh

Reputation: 11560

Reference: JObject.Properties Method

Newtonsoft.Json.Linq.JObject cbpcs = pricestopsale.cbPricegroups;
foreach (var pricegroupInfo in cbpcs.Properties())
{
    if(pricegroupInfo.Name == "propName"     // your property name
       &&  pricegroupInfo.Value.ToString() == "something") {   // your value

       // do stuff
    }
}

As you can see, it returns IEnumerable<JProperty> which use can iterate and make use of to get property Name and Value

Upvotes: 1

Vincent
Vincent

Reputation: 41

Try using an anonymous object in the select.

Newtonsoft.Json.Linq.JObject cbpcs = pricestopsale.cbPricegroups;
foreach (var pricegroupInfo in cbpcs.Properties().Select(p => new { p.Value, p.Name }).ToList())
{
    // read the properties like this
    var value = pricegroupInfo.Value;
    var name = pricegroupInfo.Name;

    if(pricegroupInfo.Value.ToObject<string>() == "foo")
    {
        Console.WriteLine("this is true");
    }
}

Upvotes: 1

Alexandr Kudryashov
Alexandr Kudryashov

Reputation: 631

Try this

foreach(var prop in cbpcs.GetType().GetProperties()) {
   Console.WriteLine("{0}={1}", prop.Name, prop.GetValue(foo, null));}

Upvotes: 0

Related Questions