没有在这个主题上花费大量时间,我很好奇除了 xml 之外,让我现有的代码序列化为 json 的最直接方法可能是什么。现有代码使用 xmlwriter 为特定目的执行一些复杂的序列化,所以最终我希望能够传递一个 jsonserializer 来代替 xml 并让它生成 json 而不是 xml。
是否有任何 json 库处理这样的事情?
没有在这个主题上花费大量时间,我很好奇除了 xml 之外,让我现有的代码序列化为 json 的最直接方法可能是什么。现有代码使用 xmlwriter 为特定目的执行一些复杂的序列化,所以最终我希望能够传递一个 jsonserializer 来代替 xml 并让它生成 json 而不是 xml。
是否有任何 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,我建议通过数据合同进行序列化,即使用数据对象上的属性来指示所需的序列化格式。查看适用于 JSON的DataContractJsonSerializer和适用于 XML 的DataCONtractSerializer。
您的模型对象看起来像这样:
[DataContract(Name = "Customer", Namespace = "http://www.contoso.com")]
class Person
{
[DataMember()]
public string FirstName;
[DataMember]
public string LastName;
[DataMember()]
public int ID;
}