c# - 在 .net 中使用 JsonConvert 对具有可变长度的对象进行 JSON 序列化

标签 c# .net json json.net

我需要有关使用 .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/

相关文章:

c# - 从 Excel 读取的随机日期格式

c# - 动态添加按钮到面板并获取它的父 ID

c# - 数学解释为什么 Decimal 到 Double 的转换被破坏并且 Decimal.GetHashCode 分隔相等的实例

c# - ASP.Net 平台是独立的吗?

javascript - 使用 lodash 将 JSON 转换为对象数组

c# - DDD,聚合根和实体

c# - SignalR 在升级时导致重大问题

c# - Autofac 的编译时支持

json - 如何使用 HTTPsURLConnection 连接 Android

javascript - 对 Play REST 服务器的 Angular 2 http 请求