このテーマに多くの時間を費やすことなく、既存のコードをxmlに加えてjsonにシリアル化できるようにするための最も簡単な方法が何であるかを知りたいと思います。既存のコードはxmlwriterを使用して特定の目的のために高度なシリアル化を実行するため、最終的にはxmlの代わりにjsonserializerを渡して、xmlの代わりにjsonを生成できるようにしたいと思います。
jsonライブラリのいずれかがこのようなものを処理しますか?
このテーマに多くの時間を費やすことなく、既存のコードをxmlに加えてjsonにシリアル化できるようにするための最も簡単な方法が何であるかを知りたいと思います。既存のコードはxmlwriterを使用して特定の目的のために高度なシリアル化を実行するため、最終的にはxmlの代わりにjsonserializerを渡して、xmlの代わりにjsonを生成できるようにしたいと思います。
jsonライブラリのいずれかがこのようなものを処理しますか?
いいえ、直接のドロップイン交換はありません。既存のJSONシリアライザーのAPIは大きく異なります。モデル全体をメモリに保存し、1つのステップでシリアル化する必要があります。たとえば、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;
}