如何在 C# 中序列化时删除列表类型属性名称以及 和 [] 括号

Posted

技术标签:

【中文标题】如何在 C# 中序列化时删除列表类型属性名称以及 和 [] 括号【英文标题】:How do i remove the List type property name and the and [] brackets while serialing in C#如何在 C# 中序列化时删除列表类型属性名称以及 和 [] 括号 【发布时间】:2021-11-28 06:57:56 【问题描述】:

这是我正在序列化的模型

    public class SomeClassOne
    
        public string name  get; set; 
        public string Gender  get; set; 
        public int Age  get; set; 
        public List<Product> Products  get; set; 
        public List<Location> locations  get; set; 
        public string DOB  get; set; 
    

    public class Product
    
        public string Code  get; set; 
        public string Price  get; set; 

    

    public class Location
    
        public string Address  get; set; 
        public string PinCode  get; set; 
    

/我正在为该模型属性赋值

    public List<Product> GetProducts()
    
        List<Product> Products = new List<Product>();
        string[] codes =  "Code-A", "Code-B", "Code-C","Code-D", "Code-E" ;
        foreach (var cod in codes)
        
            Product product = new Product();
            product.Code = cod;
            Products.Add(product);
        
        return Products;
    

    public List<SomeClassOne> someClss()
    
        List<SomeClassOne> someCls = new List<SomeClassOne();
        SomeClassOne classOne = new SomeClassOne();
        someCls.Add(classOne);
        classOne.Products = GetProducts();

        return someCls;
    

    string json = JsonConvert.SerializeObject(someClss(), Formatting.Indented);
   
    Console.WriteLine(json);
    Console.ReadLine();

生成的Json如下

[
  
    "name": null,
    "Gender": null,
    "Age": 0,
    "Products": [
      
        "Code": "Code-A",
        "Price": null
      ,
      
        "Code": "Code-B",
        "Price": null
      ,
      
        "Code": "Code-C",
        "Price": null
      ,
      
        "Code": "Code-D",
        "Price": null
      ,
      
        "Code": "Code-E",
        "Price": null
      
    ],
    "locations": null,
    "DOB": null
  
]

如何删除 [] 并在序列化后生成如下 Json

 [
          
            "Code": "Code-A",
            "Price": null
          ,
          
            "Code": "Code-B",
            "Price": null
          ,
          
            "Code": "Code-C",
            "Price": null
          ,
          
            "Code": "Code-D",
            "Price": null
          ,
          
            "Code": "Code-E",
            "Price": null
          
    ]

任何人请帮助我,我已经看到了一些合同解析器,但没有找到任何解决方案,在此先感谢。

【问题讨论】:

这很难理解,但看起来你只需要序列化一个 List&lt;Product&gt; 的实例就可以了,其余的就不用管了。 使用 json 库你只需要得到产品结果:returnvalue['Products'] @DavidG 是的,这个 List 在 SomeClassOne 和这个类中 是的,我是说你应该序列化 GetProducts() 的结果而忘记其余的。 @DavidG 实际上,这个 SomeClassOne 又是另一个类中的 List 类型属性,它们是我实际上正在序列化的更大类的一部分,那么在这种情况下我该如何实现。跨度> 【参考方案1】:

试试这个

var products=GetProducts();

string json = JsonConvert.SerializeObject(products, Newtonsoft.Json.Formatting.Indented);

    Console.WriteLine(json);
    Console.ReadLine();

json

[
  
    "Code": "Code-A",
    "Price": null
  ,
  
    "Code": "Code-B",
    "Price": null
  ,
  
    "Code": "Code-C",
    "Price": null
  ,
  
    "Code": "Code-D",
    "Price": null
  ,
  
    "Code": "Code-E",
    "Price": null
  
]

【讨论】:

以上是关于如何在 C# 中序列化时删除列表类型属性名称以及 和 [] 括号的主要内容,如果未能解决你的问题,请参考以下文章

如何在c#中使用具有相同名称但不同属性和结构的元素反序列化XML

c# JSON序列化使用值而不是属性名

在 C# 中删除 XML 序列化的 DefaultValue 属性

json 从遗留属性名称反序列化

如何在 C# 中使用类型和属性名称从 XML 创建动态对象?

xamarin android如何将Java.Lang.Object类型转成C#类型