【发布时间】:2021-08-25 00:48:02
【问题描述】:
我有一个障碍,我必须将一个简单的 User 类转换为一个非常具体的 JSON,格式为
{"fields": {
"Name": {
"stringValue": "test"
},
"Password": {
"stringValue": "Password"
},
"email" : {
"stringValue" : "emailexample"
}
}}
其中 stringValue 是包含在变量名称中的类变量的值。到目前为止,我已经尝试创建自己的序列化程序来解决这个问题,但我只能创建一个字段,即
{"Fields": {"email": {"stringValue": "emailexample"}}}
在我收到 Newtonsoft.Json.JsonException 的错误之前:'Newtonsoft.Json.Linq.JProperty cannot have multiple values.',所以我想知道我的做法是否可行(这是我的第一次尝试创建自定义序列化程序),或者我需要以完全不同的方向解决这个问题。到目前为止我尝试过的内容如下。
public override void WriteJson(JsonWriter writer, User value, JsonSerializer serializer)
{
JToken t = JToken.FromObject(value);
if (t.Type != JTokenType.Object)
{
t.WriteTo(writer);
}
else
{
JObject o = (JObject) t;
IList<string> values = o.Properties().Select(p => p.Value.ToString()).ToList();
IList<string> names = o.Properties().Select(p => p.Name).ToList();
//o.RemoveAll();
JObject val = new JObject(new JProperty("stringValue", new JValue(values[0])));
JProperty fields = new JProperty(names[0], val);
JObject field = new JObject(fields);
JProperty test = new JProperty("Fields", field);
for (int i=1; i<names.Count;i++)
{
val = new JObject(new JProperty("stringValue", new JValue(values[i])));
JProperty name = new JProperty(names[i], val);
JObject jObject = new JObject(name);
test.Add(jObject);
}
o.WriteTo(writer);
}
}
【问题讨论】:
标签: c# json json.net json-serialization