[英]Create a JSON object using properties of a C# class
I'm trying to construct a request body for a REST api call, and I need to create a JSON object with the list of properties I want to get back. 例如:我有這個 C# object 我想取回:
public class SomeProperties
{
public string TicketNumber { get; set; }
public Driver Driver { get; set; }
}
public class Driver
{
public string Name { get; set; }
}
為了得到這個,我需要將這些屬性放在 JSON 請求正文中,如下所示:
"properties": [
"ticketNumber",
"driver.name"
]
我的嘗試如下所示:
private string FetchProperties()
{
var fetchProperties = new
{
properties = new List<string>
{
"ticketNumber",
"driver.name"
}
};
var jsonResult = JsonConvert.SerializeObject(fetchProperties, Formatting.None);
return jsonResult;
}
但我不想對這樣的屬性進行硬編碼。
那么有什么方法可以使用我想要的 object 中的屬性名稱來放入我在上述方法中創建的字符串列表中?
謝謝你!
首先,如果您序列化您擁有的 class ( SomeProperties
),您將不會獲得driver.name
。 相反,你會得到一個像這樣的字符串,它將驅動程序顯示為 object,
{
properties : {
"ticketNumber" : "stringvalue",
"driver" : {
"name" : "stringValue"
}
}
}
也就是說,如果您有興趣獲得這樣的 json,
"properties": [
"ticketNumber",
"driver.name"
]
您將需要一個僅包含字符串列表的 class (非常簡單)。 properties
不是對象數組,而只是字符串。 從FetchProperties
方法的外觀來看,您正在創建一個 object,其中 fetchProperties 作為 RootObject。 試試這樣的,
public class MyClass
{
[JsonProperty("fetchProperties")]
public Fetch FetchProperties { get; set; }
}
public class Fetch
{
[JsonProperty("properties")]
public List<string> Properties { get; set; }
}
private string FetchProperties()
{
MyClass obj = new MyClass()
{
FetchProperties = new Fetch()
{
Properties = new List<string>() { "ticketNumber", "driver.Name" }
}
};
return JsonConvert.SerializeObject(obj); // Formatting.None is by default
}
現在,您可以選擇硬編碼這些值,或者將它們作為 arguments 傳遞,或者使用包含您打算存儲為“屬性”的所有字符串列表的局部變量。 由於違反命名約定(driver.name),您不能使用枚舉,因此這些選項就足夠了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.