私はJSON.NETを使用していくつかのc#オブジェクトをJSONにシリアル化します(そしてファイルに書き込みます)。
私の2つの主なクラスは次のとおりです。
public class Reservoir {
private Well[] mWells;
public Well[] wells {
get { return mWells; }
set { mWells = value; }
}
}
と
public Well() {
private string mWellName;
private double mY;
private double mX;
public string wellName {
get { return mWellName; }
set { mWellName = value; }
}
public double y {
get { return mY; }
set { mY = value; }
}
public double x {
get { return mX; }
set { mX = value; }
}
private Well[] mWellCorrelations;
}
問題は、出力が次のようになることです。
'{"wells":[{"wellName":"B-B10","y":217.04646503367468,"x":469.5776343820333,"wellCorrelations":[{"wellName":"B-B12","y":152.71005958395972,"x":459.02158140110026,"wellCorrelations":[{"wellName":"B-B13","y":475.0,"x":495.14804408905263,"wellCorrelations":[{"wellName":"B-B11","y":25.0,"x":50.0,"wellCorrelations":[]}
つまり、各ウェルオブジェクトの関連するウェルはオブジェクト自体として拡張され、関連するオブジェクトが多数ある場合、これは空間と時間の深刻な問題になります。
私は次のようなものを好んだと思います:
'{"wells":[{"wellName":"B-B10","y":217.04646503367468,"x":469.5776343820333,"wellCorrelations":[{"wellName":"B-B12"}], {"wellName":"B-B11","y":217.04646503367468,"x":469.5776343820333,"wellCorrelations":[{"wellName":"B-B13"}
つまり、リンクとしてウェル名のみを維持します(一意であると想定します)。
JSON.NETでこれを行う方法はありますか?
設定しました
serializer.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
しかし、それは何の違いもありません。