Home > OS >  How to completely remove a property from an Object in c#
How to completely remove a property from an Object in c#

Time:07-16

someone, please tell me the most straightforward syntax to remove a property from a c# object. I don't know why it is not clear on the internet.

{
  "id": 1,
  "name": "string",
  "email": "string",
  "cities": []
}

this is the response I get upon calling the get API. I want to remove the cities array, but I don't know why everything is so complicated in c#. I expect a magical short syntax like delete(in JS). Remember that this response is a dbContext response, not a standard object(DTO).

CodePudding user response:

if you going to deserialize json, you can just create a class without cities property

 public class Data
{
        public int id { get; set; }
        public string name { get; set; }
        public string email { get; set; }
 }

or if you can not change the class properties, just add an ignore attribute

using Newtonsoft.Json;

public class Data
{
        .....
        [JsonIgnore]
        public List<object> cities {get; set;}
 }

the code

Data data= JsonConvert.DeserializeObject<Data>(json);

if you want to remove only from json

    var jsonParsed = JObject.Parse(json);

    jsonParsed.Properties()
     .Where(attr => attr.Name == "cities")
     .First()
     .Remove();

    json=jsonParsed.ToString();

CodePudding user response:

first, you can not change the class structure in runtime in C#. you should define new object with your properties in mind, or use dynamic-expando objects to be able to manipulate object at runtime.

if your issue is only when you want to sterilize your object you can use [JsonIgnore] Property on the model:

public class MyDto
{
    public int id { get; set; }
    public string name { get; set; }
    public string email { get; set; }
    [JsonIgnore]
    public string[] cities { get; set; }

}

this will tell you serializer to skip that property.

if you want to convert ur already define class to a dynamic object there are lots of ways.

you can use this nugget package that I wrote which have a DeSelect() method that returns a dynamic object without the specified properties:

https://www.nuget.org/packages/linqPlusPlus/1.3.0#readme-body-tab

  • Related