C# 将多个Json对象反序列化为各自的类型

C# 将多个Json对象反序列化为各自的类型,c#,asp.net-web-api,C#,Asp.net Web Api,我的服务中发布了不同类型的Json var postedJson = [ { "firstName":"John", "lastName":"Doe" }, { "fruit":"apple", "Available":"false" }, { "length":100, "width":60, "height":30 }, { "firstName":"Shivang", "lastName":"Mittal" } ] 我在服务端有相同类型的模型,如何创建一个

我的服务中发布了不同类型的Json

var postedJson = [
    { "firstName":"John", "lastName":"Doe" },
    { "fruit":"apple", "Available":"false" },
    { "length":100, "width":60, "height":30 },
    { "firstName":"Shivang", "lastName":"Mittal" }
]
我在服务端有相同类型的模型,如何创建一个通用方法来接收数据,然后根据它们的类型进行反序列化

现在我像下面这样做

public void SaveData(MasterModel data)

public class MasterModel 
{
    public PersonInfo Person{get; set;}
    public DimensionInfo Dimension{get; set;}
}
我想让这个SaveData成为通用的,这样每当有人调用该服务时,它都会自动匹配相应的类型并与模型绑定。
有什么好方法可以做到这一点吗

首先建议的事情很少

  • 将JSON格式更改为更可解析的格式。例如:

  • 大写字母也是一个好主意,因为这些属性被转换为强类型属性

  • Main

    string json = "[  {    \"Name\": {      \"FirstName\":\"John\",      \"LastName\":\"Doe\"    },    \"Fruit\": {      \"Fruit\":\"apple\",      \"Available\":\"false\"    },    \"Dimensions\": {      \"Length\": 100,      \"Width\": 60,      \"Height\": 30    }  }  , {    \"Name\": {      \"firstName\":\"Shivang\",      \"lastName\":\"Mittal\"    },    \"Fruit\": {      \"Fruit\":\"orange\",      \"Available\":\"true\"    },    \"Dimensions\": {      \"Length\": 120,      \"Width\": 40,      \"Height\": 10    }  }]";
    
    var model = new Model();
    // Here is the magic happening, thanks to `Newtonsoft.Json`
    model.Peoples = JsonConvert.DeserializeObject<List<Person>>(json);
    
    string json=“[{\'Name\”:{\'FirstName\”:“John\”,“LastName\”:“Doe\”,“Fruit\”:“{\'Fruit\”:“apple\”,“Available\”:“false\”,“Dimensions\”:{\'Length\”:100,\'Width\:60,\'Height\:30},{\'Name\:{\'FirstName\:{\'FirstName\:“Shivang\”,“LastName\:“Mittal\“},\\\\\”:{\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\;
    var模型=新模型();
    //多亏了“Newtonsoft.Json”,神奇的事情发生了`
    model.Peoples=JsonConvert.DeserializeObject(json);
    
    实体

    public class Model
    {
        public List<Person> Peoples { get; set; }
    }
    
    public class Person
    {
        public Name Name { get; set; }
        public Fruit Fruit { get; set; }
        public Dimensions Dimensions { get; set; }
    }
    
    public class Name
    {
        public string FirstName { get; set; }   
        public string LastName { get; set; }
    }
    
    public class Fruit
    {
        public string Type { get; set; }    
        public bool Available { get; set; }
    }
    
    public class Dimensions
    {
        public int Length { get; set; } 
        public int Height { get; set; }
        public int Width { get; set; }
    }
    
    公共类模型
    {
    公共列表人{get;set;}
    }
    公共阶层人士
    {
    公共名称名称{get;set;}
    公共水果{get;set;}
    公共维度维度{get;set;}
    }
    公共类名
    {
    公共字符串名{get;set;}
    公共字符串LastName{get;set;}
    }
    公共级水果
    {
    公共字符串类型{get;set;}
    公共bool可用{get;set;}
    }
    公共类维度
    {
    公共整数长度{get;set;}
    公共整数高度{get;set;}
    公共整数宽度{get;set;}
    }
    
    您可以更改当前的JSON结构吗?@OrelEraki:可以,我可以这样做我会尝试
    List
    var listOfDicts=JsonConvert.DeserializeObject(JSON)
    @EZI:绑定到模型对于根据类型将数据推送到Elasticsearch非常重要,并且在模型上也有某些验证。调用仍然不是泛型的。每次出现新类型时,我都需要在“public class Person”中添加新类型。