Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将对象序列化为具体对象_C#_.net_Json_Asp.net Web Api2 - Fatal编程技术网

C# 如何将对象序列化为具体对象

C# 如何将对象序列化为具体对象,c#,.net,json,asp.net-web-api2,C#,.net,Json,Asp.net Web Api2,我有一个方法: public object getData() { //make an external call } 执行getData()时,我们得到一个如下所示的对象: { "Location": { "LocationID":1, "ABCIsCopperFiberNidBit":0, "ABCCopperJunctionID":0, "ABCFiberJunctionID":0,

我有一个方法:

public object getData()
{
   //make an external call
}
执行
getData()
时,我们得到一个如下所示的对象:

{  
   "Location": 
      {  
         "LocationID":1,
         "ABCIsCopperFiberNidBit":0,
         "ABCCopperJunctionID":0,
         "ABCFiberJunctionID":0,
         "ABCGrade":0,
         "ABCCopperDSLAMDistance":0
      }
}
从上面我需要将其转换为具体的数据类型

例如
列表

public class LocationModel
{
   public int locationId{get;set;}
   public string key {get;set;}
   public string value {get;set;}
}
我要查找的结果是一个
列表

如何将此对象转换为所需的强类型数据类型?


我的问题不是为了让你替我做事。我是一个经验丰富的开发人员,我很难通过各种不同的方式完成这项任务

类似Json.NET的东西可以很好地工作:

string json = @"{
 ""Location"": 
      {  
         ""LocationID"":1,
         ""ABCIsCopperFiberNidBit"":0,
         ""ABCCopperJunctionID"":0,
         ""ABCFiberJunctionID"":0,
         ""ABCGrade"":0,
         ""ABCCopperDSLAMDistance"":0
      }
}";
然后:

var obj=(JObject)Newtonsoft.Json.JsonConvert.DeserializeObject(Json);
var loc=obj[“位置”];
var locid=loc[“LocationID”].Value();
var list=新列表();
foreach(类型()的loc.Children()中的var prop)
{
如果(prop.Name==“LocationID”)继续;
列表。添加(新位置模型
{
locationId=locid,
key=prop.Name,
value=prop.value.ToString()
});
}

看起来像字符串,而不是对象。将返回类型更改为
string
,并使用JSON.NET进行反序列化it@PanagiotisKanavos返回的数据类型是object,这是我无法更改的,因此您是否建议我可以将其转换为
字符串
?您的
位置模型
与json字符串无关。事实上,它与强类型相反。您想生成键/值的非类型化列表,而不是将字符串反序列化为具有
Location
、LocationId等的stronly类型化对象?为什么?@PanagiotisKanavos好问题,这是一个糟糕的设计,但这是我们必须与客户合作的地方。我是说这不是一个目标。你应该告诉我们是什么类型的。在调试器中检查它。添加一个watch变量并检查其类型。它看起来像一个包含JSON的字符串
string json = @"{
 ""Location"": 
      {  
         ""LocationID"":1,
         ""ABCIsCopperFiberNidBit"":0,
         ""ABCCopperJunctionID"":0,
         ""ABCFiberJunctionID"":0,
         ""ABCGrade"":0,
         ""ABCCopperDSLAMDistance"":0
      }
}";
    var obj = (JObject)Newtonsoft.Json.JsonConvert.DeserializeObject(json);
    var loc = obj["Location"];

    var locid = loc["LocationID"].Value<int>();
    var list = new List<LocationModel>();
    foreach(var prop in loc.Children().OfType<JProperty>())
    {
        if (prop.Name == "LocationID") continue;
        list.Add(new LocationModel
        {
            locationId = locid,
            key = prop.Name,
            value = prop.Value.ToString()
        });
    }