【问题标题】:JSON writer - drop in replacment for xmlwriter?JSON writer - 替换 xmlwriter?
【发布时间】:2013-01-14 06:30:17
【问题描述】:

没有在这个主题上花费大量时间,我很好奇除了 xml 之外,让我现有的代码序列化为 json 的最直接方法可能是什么。现有代码使用 xmlwriter 为特定目的执行一些复杂的序列化,所以最终我希望能够传递一个 jsonserializer 来代替 xml 并让它生成 json 而不是 xml。

是否有任何 json 库处理这样的事情?

【问题讨论】:

    标签: c# xml xml-serialization json


    【解决方案1】:

    不,没有直接的替代品。现有 JSON 序列化程序的 API 有很大不同。他们需要将整个模型保存在内存中,并一步将其序列化。例如JSON.NET,您将使用:

    string json = JsonConvert.SerializeObject(product);
    

    实现您正在寻找的正确方法是抽象接口背后的对象的实际序列化:

    public interface IMySerializer
    {
        void Serialize(MyObject instance, Stream stream);
    }
    

    现在您可以拥有此接口的多个实现,例如MySerializerXmlMySerializerJsonMySerializerCsv、...

    现在依赖于序列化的代码可以简单地使用IMySerializer。因此,当您需要处理一种新格式时,您所要做的就是插入这个接口的一个实现。

    【讨论】:

      【解决方案2】:

      XmlWriter 没有直接替代品。如果您想同时支持 XML 和 JSON,我建议通过数据合同进行序列化,即使用数据对象上的属性来指示所需的序列化格式。查看DataContractJsonSerializer 用于 JSON 和 DataCOntractSerializer 用于 XML。

      您的模型对象看起来像这样:

      [DataContract(Name = "Customer", Namespace = "http://www.contoso.com")]
      class Person
      {
          [DataMember()]
          public string FirstName;
          [DataMember]
          public string LastName;
          [DataMember()]
          public int ID;
      }
      

      【讨论】:

      • 在这种情况下我有非常具体的逻辑,它根据状态和其他一些逻辑进行不同的序列化,因此必须通过遍历我的对象树并通过 xml(或其他)编写器写入来手动序列化。所以我正在寻找一种方法以某种方式抽象作者,以便我可以替代其他人。
      • 您可以应用您的特定逻辑并使用它来生成一组直接映射到您的 JSON / XML 结构的类。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-22
      • 2015-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多