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()
});
}