将 JSON 反序列化为 asp.net 核心中的匿名对象
Deserialize JSON to anonymous object in asp.net core
我有一个 XML 这样的:
<?xml version="1.0" encoding="UTF-8" ?>
<RESPONSE>
<SINGLE>
<KEY name="grades">
<MULTIPLE>
<SINGLE>
<KEY name="courseid">
<VALUE>3</VALUE>
</KEY>
<KEY name="grade">
<VALUE>40.00</VALUE>
</KEY>
<KEY name="rawgrade">
<VALUE>40.00000</VALUE>
</KEY>
<KEY name="rank">
<VALUE null="null"/>
</KEY>
</SINGLE>
</MULTIPLE>
</KEY>
<KEY name="warnings">
<MULTIPLE></MULTIPLE>
</KEY>
</SINGLE>
</RESPONSE>
我已将其转换为 JSON 字符串,如下所示
string json = JsonConvert.SerializeXmlNode(doc);
但我需要将我的 JSON 分配给以下 class 类型的对象
public class Grades
{
public string Courseid { get; set; }
public string Grade{ get; set; }
public string Rawgrade{ get; set; }
public string Rank{ get; set; }
}
这样,我就可以访问或分配我的值到
Grade mygrade;
或以后mygrade.Courseid
现在看起来像这样:
{
"?xml": {
"@version": "1.0",
"@encoding": "UTF-8"
},
"RESPONSE": {
"SINGLE": {
"KEY": [
{
"@name": "grades",
"MULTIPLE": {
"SINGLE": {
"KEY": [
{
"@name": "courseid",
"VALUE": "3"
},
{
"@name": "grade",
"VALUE": "40.00"
},
{
"@name": "rawgrade",
"VALUE": "40.00000"
},
{
"@name": "rank",
"VALUE": {
"@null": "null"
}
}
]
}
}
},
{
"@name": "warnings",
"MULTIPLE": ""
}
]
}
}
}
但是我需要像下面这样的JSON
{
"courseid" : "3",
"grade": "40.00",
"rawgrade": "40.00000",
"rank": "null"
}
如何将我的 json 正确分配给上述 class 格式 Grades
?谁能帮帮我吗?我是 ASP.NET Core 的新手。
根据您的输入 xml 和输出 json,您无法直接转换为 JSON。这是使用 LINQ
获取所需对象并使用 JsonConvert
序列化的一种方法
var strFile = File.ReadAllText("XMLFile1.xml");
var grades = xdoc.Descendants("KEY")
.Where(x => x.Attribute("name").Value == "grades")
.Descendants("SINGLE")
.Select(y => new Grades
{
Courseid = y.Descendants("KEY").Where(z => z.Attribute("name").Value == "courseid").Select(a => a.Element("VALUE").Value).FirstOrDefault(),
Grade = y.Descendants("KEY").Where(z => z.Attribute("name").Value == "grade").Select(a => a.Element("VALUE").Value).FirstOrDefault(),
Rawgrade = y.Descendants("KEY").Where(z => z.Attribute("name").Value == "rawgrade").Select(a => a.Element("VALUE").Value).FirstOrDefault(),
Rank = y.Descendants("KEY").Where(z => z.Attribute("name").Value == "rank").Select(a => a.Element("VALUE").Value).FirstOrDefault(),
});
Console.WriteLine(JsonConvert.SerializeObject(grades));
我有一个 XML 这样的:
<?xml version="1.0" encoding="UTF-8" ?>
<RESPONSE>
<SINGLE>
<KEY name="grades">
<MULTIPLE>
<SINGLE>
<KEY name="courseid">
<VALUE>3</VALUE>
</KEY>
<KEY name="grade">
<VALUE>40.00</VALUE>
</KEY>
<KEY name="rawgrade">
<VALUE>40.00000</VALUE>
</KEY>
<KEY name="rank">
<VALUE null="null"/>
</KEY>
</SINGLE>
</MULTIPLE>
</KEY>
<KEY name="warnings">
<MULTIPLE></MULTIPLE>
</KEY>
</SINGLE>
</RESPONSE>
我已将其转换为 JSON 字符串,如下所示
string json = JsonConvert.SerializeXmlNode(doc);
但我需要将我的 JSON 分配给以下 class 类型的对象
public class Grades
{
public string Courseid { get; set; }
public string Grade{ get; set; }
public string Rawgrade{ get; set; }
public string Rank{ get; set; }
}
这样,我就可以访问或分配我的值到
Grade mygrade;
或以后mygrade.Courseid
现在看起来像这样:
{
"?xml": {
"@version": "1.0",
"@encoding": "UTF-8"
},
"RESPONSE": {
"SINGLE": {
"KEY": [
{
"@name": "grades",
"MULTIPLE": {
"SINGLE": {
"KEY": [
{
"@name": "courseid",
"VALUE": "3"
},
{
"@name": "grade",
"VALUE": "40.00"
},
{
"@name": "rawgrade",
"VALUE": "40.00000"
},
{
"@name": "rank",
"VALUE": {
"@null": "null"
}
}
]
}
}
},
{
"@name": "warnings",
"MULTIPLE": ""
}
]
}
}
}
但是我需要像下面这样的JSON
{
"courseid" : "3",
"grade": "40.00",
"rawgrade": "40.00000",
"rank": "null"
}
如何将我的 json 正确分配给上述 class 格式 Grades
?谁能帮帮我吗?我是 ASP.NET Core 的新手。
根据您的输入 xml 和输出 json,您无法直接转换为 JSON。这是使用 LINQ
获取所需对象并使用 JsonConvert
var strFile = File.ReadAllText("XMLFile1.xml");
var grades = xdoc.Descendants("KEY")
.Where(x => x.Attribute("name").Value == "grades")
.Descendants("SINGLE")
.Select(y => new Grades
{
Courseid = y.Descendants("KEY").Where(z => z.Attribute("name").Value == "courseid").Select(a => a.Element("VALUE").Value).FirstOrDefault(),
Grade = y.Descendants("KEY").Where(z => z.Attribute("name").Value == "grade").Select(a => a.Element("VALUE").Value).FirstOrDefault(),
Rawgrade = y.Descendants("KEY").Where(z => z.Attribute("name").Value == "rawgrade").Select(a => a.Element("VALUE").Value).FirstOrDefault(),
Rank = y.Descendants("KEY").Where(z => z.Attribute("name").Value == "rank").Select(a => a.Element("VALUE").Value).FirstOrDefault(),
});
Console.WriteLine(JsonConvert.SerializeObject(grades));