如何将任何 JSON 对象转换为 C# 对象
Posted
技术标签:
【中文标题】如何将任何 JSON 对象转换为 C# 对象【英文标题】:How to convert any JSON object to C# object 【发布时间】:2022-01-24 04:52:58 【问题描述】:我有几个不同的 JSON 对象。
拳头 JSON 对象
"api":
"NAME":"CUSTOMER_CREATE",
"QUERY":"CUSTOMER_CREATE"
,
"header" :
"PartyNumber": "1488002",
"OrganizationName": "Test Organization-02",
"RawPhoneNumber": "9199199199",
"PartyUsageCode": "EXTERNAL_LEGAL_ENTITY",
"Address": [
"AddressType": "BILL_TO",
"Address1": "77 College Rd",
"Address2": "London NW10 5SE",
"Address3": "London NW10 5SF",
"Address4": "London NW10 5SG",
"City": "London",
"Country": "GB",
"PostalCode": "NW10 5ES"
第二个 JSON 对象
"api":
"NAME":"ITEM_CREATE",
"QUERY":"ITEM_CREATE"
,
"header" :
"OrganizationCode": "IM_MASTER_ORG",
"ItemClass" : "Root Item Class",
"ItemNumber" : "TEST-01",
"ItemDescription" : "TEST-01",
"ItemStatusValue" : "Active",
"PrimaryUOMValue" : "Each",
"LifecyclePhaseValue" : "Production"
我也有很多这样的 JSON 对象。所有 JSON 对象都不相同。所以我想编写一个 C# 类来将这个任何 JSON 对象转换为 C# 对象。那么你能请我一堂课来转换这些 JSON 对象吗?
目前我正在使用这个类来转换 Json 对象。但我想把它做成一个动态类
public class MHScaleMessage
//public string api get; set;
public Dictionary<string, string> api get; set; = new Dictionary<string, string>();
public Dictionary<string, string> header get; set; = new Dictionary<string, string>();
public List<Dictionary<string, string>> lineItems get; set; = new List<Dictionary<string, string>>();
public static string GetValue(Dictionary<string, string> d, string key, string defaultVal="")
if (key == null) return defaultVal;
return d.TryGetValue(key, out string val) ? val : defaultVal;
public static int GetValueAsInt(Dictionary<string, string> d, string key, int defaultVal=0)
if (key == null) return defaultVal;
string val = d.TryGetValue(key, out val) ? val : null;
if (val == null) return defaultVal;
return int.TryParse(val, out _) ? 0 : defaultVal;
public string ToJsonString()
var options = new JsonSerializerOptions
WriteIndented = true,
IgnoreNullValues = true
;
return System.Text.Encoding.UTF8.GetString(JsonSerializer.SerializeToUtf8Bytes(this, options));
public string _ToString()
string s="";
s += ""; s += "\n";
s += "api = " + api; s += ","; s += "\n";
s += "header ="; s += "\n";
s += "";
header.ToList().ForEach(x => s += x.Key + " = " + x.Value + "\n");
s += ""; s += ","; s += "\n";
s += "lineItems"; s += "\n";
s += ""; s += "[";
lineItems.ForEach(x =>
x.ToList().ForEach(y =>
s += y.Key + " = " + y.Value;
s += ","; s += "\n";
);
);
s += "]"; s += ""; s += "\n";
s += "";
return s;
之后我使用以下方法来执行 API。这个方法我可以传参数。
private static MHScaleMessage PerformAPIFunction(MHScaleMessage requestObj)
【问题讨论】:
你可能想看看newtonsoft.com/json。根据经验,您应该通过一个小代码示例提出问题,以便人们可以帮助您找出缺少的内容。 【参考方案1】:有多种方法可以将 JSON 对象转换为 C# 尖锐对象,这里我将展示几种方法。
一行代码
var oMycustomclassname = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(jsonString);
如果您有自己的班级,请将var
更改为您自己的班级。
使用 JSON.NET
有一种将 JSON 转换为 C# 对象的推荐方法,即JSON.NET 查看 github 存储库以获取更多信息。这是您的案例的示例。
public class User
public User(string json)
JObject jObject = JObject.Parse(json);
JToken jUser = jObject["api"];
name = (string) jUser["NAME"];
query = (string) jUser["QUERY"];
JToken jUser1 = jObject["header"];
OrganizationCode = (string) jUser1["OrganizationCode"];
ItemClass = (string) jUser1["ItemClass"];
ItemNumber = jUser1["ItemNumber"];
public string api_Name get; set;
public string api_Query get; set;
public string header_OrganizationCode get; set;
public string header_ItemClass get; set;
// Use
private void Run()
string json = @""api":
"NAME":"ITEM_CREATE",
"QUERY":"ITEM_CREATE"
,
"header" :
"OrganizationCode": "IM_MASTER_ORG",
"ItemClass" : "Root Item Class",
"ItemNumber" : "TEST-01",
"ItemDescription" : "TEST-01",
"ItemStatusValue" : "Active",
"PrimaryUOMValue" : "Each",
"LifecyclePhaseValue" : "Production"
";
User user = new User(json);
Console.WriteLine("Name : " + user.name);
Console.WriteLine("Teamname : " + user.teamname);
Console.WriteLine("Email : " + user.email);
Console.WriteLine("Players:");
foreach (var player in user.players)
Console.WriteLine(player);
【讨论】:
如何使用上述类转换为所有 JSON 对象。我有关于将 JSON 转换为 C# 的当前类的更新问题。您能否将该课程更新为动态课程。那么我不想提及上面的任何事情。自动将 Json 转换为 C# 对象。然后我可以使用那个参数【参考方案2】:您可以使用 Newtonsoft.Json 库轻松获得您的要求。我正在写下面的一个例子,看看它。
您收到的对象类型的类:
public class Student
public int ID get; set;
public string Name get; set;
代码:
static void Main(string[] args)
string json = "\"ID\": 1, \"Name\": \"Abdullah\"";
Student student = JsonConvert.DeserializeObject<User>(json);
Console.ReadKey();
解析 json 的简单方法。
【讨论】:
以上是关于如何将任何 JSON 对象转换为 C# 对象的主要内容,如果未能解决你的问题,请参考以下文章