代码之家  ›  专栏  ›  技术社区  ›  CBC_NS

如何设置父对象和相关子对象中具有给定名称的所有特性的值?

  •  0
  • CBC_NS  · 技术社区  · 4 年前

    我有一个如下所示的对象树。我想克隆这个对象,同时我想更新所有名为 身份证件 到0。使用newtonsoft是否可行?

    public class A
    {
        public int Id { get; set; }
    
        public B B { get; set; }
    }
    
    public class B
    {
        public int Id { get; set; }
    
        public string SomeProperty { get; set; } 
    }
    
    0 回复  |  直到 4 年前
        1
  •  2
  •   Brian Rogers    4 年前

    当然,您可以使用Newtonsoft的 LINQ-to-JSON 要做到这一点:

    public static T CloneObjectAndResetIdsToZero<T>(T obj)
    {
        var jo = JObject.FromObject(obj);
        var idProps = jo.Descendants()
            .OfType<JProperty>()
            .Where(jp => jp.Name == "Id" && jp.Value.Type == JTokenType.Integer);
    
        foreach (var prop in idProps)
        {
            prop.Value = new JValue(0);
        }
        return jo.ToObject<T>();
    }
    

    在此进行工作演示: https://dotnetfiddle.net/AH5fee

        2
  •  -1
  •   Enes Kartal    4 年前

    我认为您可以在读取之后设置Id值。

    若您编写json数据,您可以创建一个基类并从基类生成其他类。

    public class MyBaseClass
    {
      public int Id {get;set;}=0;
    }
    
    public class A:MyBaseClass
    {
      public B B {get;set;}
    }
    
    public class B:MyBaseClass
    {
      public string SomeProperty {get; set;}
    }