【发布时间】:2013-01-14 06:30:17
【问题描述】:
没有在这个主题上花费大量时间,我很好奇除了 xml 之外,让我现有的代码序列化为 json 的最直接方法可能是什么。现有代码使用 xmlwriter 为特定目的执行一些复杂的序列化,所以最终我希望能够传递一个 jsonserializer 来代替 xml 并让它生成 json 而不是 xml。
是否有任何 json 库处理这样的事情?
【问题讨论】:
标签: c# xml xml-serialization json
没有在这个主题上花费大量时间,我很好奇除了 xml 之外,让我现有的代码序列化为 json 的最直接方法可能是什么。现有代码使用 xmlwriter 为特定目的执行一些复杂的序列化,所以最终我希望能够传递一个 jsonserializer 来代替 xml 并让它生成 json 而不是 xml。
是否有任何 json 库处理这样的事情?
【问题讨论】:
标签: c# xml xml-serialization json
不,没有直接的替代品。现有 JSON 序列化程序的 API 有很大不同。他们需要将整个模型保存在内存中,并一步将其序列化。例如JSON.NET,您将使用:
string json = JsonConvert.SerializeObject(product);
实现您正在寻找的正确方法是抽象接口背后的对象的实际序列化:
public interface IMySerializer
{
void Serialize(MyObject instance, Stream stream);
}
现在您可以拥有此接口的多个实现,例如MySerializerXml、MySerializerJson、MySerializerCsv、...
现在依赖于序列化的代码可以简单地使用IMySerializer。因此,当您需要处理一种新格式时,您所要做的就是插入这个接口的一个实现。
【讨论】:
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;
}
【讨论】: