我需要有关使用 .NET/Newtonsoft JsonConvert.SerializeObject 方法进行一些 JSON 序列化的帮助。我有一个用于存储出站变量的类,称为 JSONVars。
我的问题是关于如何处理下面示例中的“Answer”变量。
名字和姓氏在循环中总是有一个返回值,所以这很容易。然而,Answer 部分可以在一个循环中有多个返回。
理论上的出站 JSON 字符串如下所示:
{
"FirstName" : "John",
"LastName" : "Doe",
"FavoriteVacation" : "Beach",
"FavoriteState" : "FL"
.....
}
“...”表示循环中 1 到 n 种可能的返回值。
如您所见,我发送 JSON 字符串的地方需要将其全部包含在一个以逗号分隔的字符串中,该字符串是格式正确的 JSON,因此我无法将 Answer block 作为 JSON 数组发送,如下所示(它会失败):
{
"FirstName" : "John",
"LastName" : "Doe",
"Answers" : [
"FavoriteVacation" : "Beach",
"FavoriteState" : "FL" .....
}
如何调整它以便我可以“添加”到 json 序列化字符串 1 到 n“答案” block ?
这是我的代码:
public class JSONVars
{
public string FirstName;
public string LastName;
//??? public string Answer;
}
static void Main(string[] args)
{
foreach (var objReturn in objlst)
{
JSONVars jsonvars = new JSONVars();
jsonvars.FirstName = objReturn.FirstName;
jsonvars.LastName = objReturn.LastName;
foreach (var answerobj in objReturn.SurveyAnswers)
{
if (answerobj.Vacation != null)
{
foreach (var answerobjVaca in answerobj.Vacation)
{
//???????
//answerobjVaca.QuestionText;
//answerobjVaca.AnswerText;
}
}
}
var jsonHolder = JsonConvert.SerializeObject(jsonvars);
}
}
jsonHolder var 是发送到外部服务的内容,需要正确序列化以进行 JSON 传输。
请注意为简洁起见省略了一些代码(例如如何填充 objReturn)。
最佳答案
快速简便的解决方案是使用 Dictionary<string, object>
代替 JSONVars
.所以你做这样的事情:
var dict = new Dictionary<string,object>();
dict["FirstName"] = objReturn.FirstName;
dict["LastName"] = objReturn.LastName;
foreach (var answerobj in objReturn.SurveyAnswers)
{
// it's not entirely clear where you are getting the JSON
// property names from, but assuming `QuestionText` gives you the property name
// Otherwise, adjust as necessary...
dict[answerObj.QuestionText] = answerObj.AnswerText;
}
更复杂的解决方案是编写自定义转换器(这并不难)。然后你可以得到你的JSONVars
类看起来像这样:
public class JSONVars
{
public string FirstName;
public string LastName;
public Dictionary<string,object> Answers;
}
并使用您的自定义转换器来展平Answers
放入您的 JSON 字符串中。
关于c# - 在 .net 中使用 JsonConvert 对具有可变长度的对象进行 JSON 序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43637467/