我有以下類結構:
public class JsonModel
{
public string PropertyName { get; set; }
public string PropertyValue { get; set; }
}
我有一個這個類的實體如下:
var entry = new JsonModel { PropertyName = "foo", PropertyValue = "bar" };
我想將其轉換為 json,但我希望它是這樣的:
{
"foo": "bar"
}
有誰知道我怎么能做到這一點?我確定它一定很簡單?
uj5u.com熱心網友回復:
假設您的類只有 2 個屬性(名稱和值),您可以使用它
var entry = new JsonModel { PropertyName = "foo", PropertyValue = "bar" };
var json= GetJson(entry);
public string GetJson(object obj)
{
var prop= obj.GetType().GetProperties();
var prop1=prop[0].GetValue(obj, null).ToString();
var prop2= prop[1].GetValue(obj, null).ToString();
return "{\n\"" $"{prop1}\": \"{prop2}" "\"\n}";
}
json
{
"foo": "bar"
}
如果您想使用序列化程式,則可以這樣做
public string GetJsonFromParsing(object obj)
{
var json=JsonConvert.SerializeObject(obj);
var properties=JObject.Parse(json).Properties().ToArray();
var prop1 = properties[0].Value;
var prop2 = properties[1].Value;
return "{\n\"" $"{prop1}\": \"{prop2}" "\"\n}";
}
uj5u.com熱心網友回復:
如果您使用Newtonsoft Json.NET,則可以使用JsonConverter實作來處理它。
這是一個相當幼稚的實作:
public class JsonModelConverter : JsonConverter
{
public override bool CanConvert(Type objectType) => objectType == typeof(JsonModel);
public override object ReadJson(JsonReader reader, Type objectType,
object existingValue, JsonSerializer serializer)
{
var dict = serializer.Deserialize<Dictionary<string, string>>(reader);
var item = dict.First();
return new JsonModel { PropertyName = item.Key, PropertyValue = item.Value };
}
public override void WriteJson(JsonWriter writer, object value,
JsonSerializer serializer)
{
var model = (JsonModel)value;
var dict = new Dictionary<string, string>();
dict[model.PropertyName] = model.PropertyValue;
serializer.Serialize(writer, dict);
}
}
您必須將其傳遞給SerializeObject和DeserializeObject<T>方法,這是一個帶有示例輸出的用法示例:
void Main()
{
var t = new Test
{
Model = new JsonModel { PropertyName = "key", PropertyValue = "some value" }
};
string json = JsonConvert.SerializeObject(t, new JsonModelConverter());
Console.WriteLine(json);
var t2 = JsonConvert.DeserializeObject<Test>(json, new JsonModelConverter());
Console.WriteLine($"{t2.Model.PropertyName}: {t2.Model.PropertyValue}");
}
public class Test
{
public JsonModel Model { get; set; }
}
輸出:
{"Model":{"key":"some value"}}
key: some value
uj5u.com熱心網友回復:
要輸出鍵值對,只需在介面中指定鍵和值。在你的情況下:
public interface IKVP
{
string PropertyName { get; set; }
string PropertyValue { get; set; }
}
然后就可以輸出任何符合介面的類:
public class JsonModel : IKVP
{
public string PropertyName { get; set; }
public string PropertyValue { get; set; }
}
完成后,創建一個擴展方法,該方法將只采用實作介面的類:
public static class ClassConverter
{
public static string ToJson<T>(this T value) where T : IKVP
=> $"{{ \x22{value.PropertyName}\x22 : \x22{value.PropertyValue}\x22 }}";
}
完成后,輸出json字串:
var entry = new JsonModel { PropertyName = "foo", PropertyValue = "bar" };
var json = entry.ToJson(); // { "foo" : "bar" }
對于更復雜的情況,根據需要在此基礎上進行構建。
uj5u.com熱心網友回復:
在包括 C# 在內的大多數編程語言中,序列化為 JSON 的常用方法是將欄位的名稱作為鍵名,將欄位的值作為值。
您要求實作的是以某種方式在兩個不同的領域之間進行耦合,這不是一件常見的事情。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/396154.html
上一篇:使用axios從Node.jsRestApi中提取資料到React中
下一篇:如何將JSON轉換為字串陣列
