【问题标题】:JavaScriptSerializer: Serialize a list + a string into JSONJavaScriptSerializer:将列表 + 字符串序列化为 JSON
【发布时间】:2012-12-30 06:58:24
【问题描述】:

我想使用 JavaScriptSerializer 发送一个 JSON 数据包,其中包含对象列表和字符串,标识为 ChatLogPath。据我所知,该类只能序列化一个对象 - 作为列表 - 如果我尝试附加多个对象,它显然只会创建像 {...}{...} 这样的无效 JSON工作。

有没有办法做到这一点?我对 C# 和 ASP.NET MVC 非常陌生,所以如果这是一个愚蠢的问题,请原谅我 :)

编辑:这是我现在的代码。

    string chatLogPath = "path_to_a_text_file.txt";
    IEnumerable<ChatMessage> q = ...
    ...
    JavaScriptSerializer json = new JavaScriptSerializer();
    return json.Serialize(q) + json.Serialize(chatLogPath);

这将在 JSON { ... } 中输出这样的数组,然后是 chatLogPath { ... }。换句话说,它不能工作,因为那是无效的 JSON。

【问题讨论】:

    标签: c# asp.net-mvc json


    【解决方案1】:

    获取包含数组和路径的单个 JSON 对象的最简单方法是创建一个类或动态对象,每个对象都作为它的属性/字段。

    类示例:

    public class ChatInformation {
      public IEnumerable<ChatMessage> messages;
      public string chatLogPath;
    }
    ...
    var output = new ChatInformation {
      messages = ...,
      chatLogPath = "path_to_a_text_file.txt"
    };
    return json.Serialize(output);
    

    动态示例(需要 .NET 4+):

    dynamic output = new ExpandoObject {
      messages = ...,
      chatLogPath = "path_to_a_text_file.txt"
    };
    return json.Serialize(output);
    

    匿名类型示例(如果您不关心其他类,也不在 .NET 4 上):

    var output = new {
      messages = ...,
      chatLogPath = "path_to_a_text_file.txt"
    };
    return json.Serialize(output);
    

    【讨论】:

    • 不敢相信我没有想到这一点,但这绝对是有道理的。非常感谢!
    猜你喜欢
    • 2019-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多