在 C# 中创建一个每次都可以具有不同属性的类或对象

Posted

技术标签:

【中文标题】在 C# 中创建一个每次都可以具有不同属性的类或对象【英文标题】:Create an class or an object that can have different properties everytime in C# 【发布时间】:2021-12-13 18:21:52 【问题描述】:

我有一个类,它有一个名为 properties 的属性,但该属性可以有不同的值。这些是来自某个地方的动态值,我需要创建一个结构为 具有 Customer 和属性的 Json 可以具有不同的值。我尝试了以下方法:

客户类别

public class Customer
  public string name get;set;
  public dynamic properties get;set;

这些属性可以是动态的。例如 - 这可以是我得到的 json

第一个例子:

"properties":
  "name": "Mark",
  "address": 
    "city":"paris"
   

第二个例子:

"properties":
  "name": "Chris",
  "description":"human",
  "birth":"1990",
  "address": 
    "name":"paris"
   

每当我执行 properties.address.name 时,它​​都会说它可以引用 null 引用。我不确定动态类型是否正确。这应该如何在 C# 中完成。如果属性可以有不同的值,你采取什么方法?

【问题讨论】:

您不是第一个在 C# 中处理 JSON 的人。您认为需要自己构建它有什么特别的原因吗? 这能回答你的问题吗? Dynamic Object Serialization @Damien_The_Unbeliever 你自己是什么意思?我们需要将其发送到特定产品,因此我们需要自己构建它 受@Harish 想法启发,您可以在运行时使用反射创建具有自定义属性的自定义类型:***.com/questions/3862226/… 这能回答你的问题吗? Deserialize JSON into C# dynamic object? 【参考方案1】:

动态类型很复杂,但简而言之,它们是在运行时而不是编译时评估的(请参阅:https://www.geeksforgeeks.org/dynamic-type-in-c-sharp/)。看起来这不是您正在处理的问题,您可以简化解决方案。

您的问题似乎有很多答案(简短的谷歌提出:Add properties dynamically at run time in existing class c# 等等),您可以尝试并实施。

但是 - 使用像 newtonsoft.json 这样的 json 支持包并有一个 json 对象作为 Properties 可能会更容易。

然后您将能够添加和使用 json 元素(属性):

using Newtonsoft.Json;

public class Customer 
   
   public string Name get;set;   
   public JObject Properties get;set; = new JObject();

添加:

customer.Properties["evilProp"] = 666;

然后得到它:

var numberFromHell = customer.Properties["evilProp"];

【讨论】:

这是一个好的开始,但没有按预期工作。我正在尝试以下 customer.Properties["evilProp"] = new name = "Test", address= new name = "what", last = new name = "test5" ;它说无法转换为 Jtoken 我可以将它更改为 ToString() 但我需要它是 JSON 格式。你能帮忙吗? customer.Properties["evilProp"] 与您的示例不匹配。 customer.Properties = new name = "Test", address= new name = "what" ; 确实如此。而且您不能对动态对象使用索引。

以上是关于在 C# 中创建一个每次都可以具有不同属性的类或对象的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C# 中创建具有命名空间的文档

如何在 C# 中创建具有命名空间的文档

Java eclipse中创建项目以后缺省包和命名的包有啥区别?

为什么不能引用在Swift项目的同一目录中创建的类或结构?

在 C# 中创建基于可枚举数组的类

在应用程序购买中创建ios应用程序时,我有一个查询