0

数時間頭をかいていた。グーグルも。しかし、xmlを正しく生成する方法を理解することはできません。私がこれを理解するのを助けることができる入力を高く評価します。私は以前にxsd.exeを、それほど複雑でないスキームと一緒に問題なく使用しました。

そのため、エラーが発生します。オブジェクト参照がオブジェクトのインスタンスに設定されていません。

このxsdファイルからC#クラスを作成しました:http ://www8.garmin.com/xmlschemas/TrainingCenterDatabasev2.xsd

次のようなMicrosoftxsd.exeツールを使用してクラスを作成しました:xsd.exe xsd-file / classes

次に、[] []のような二重角かっこを削除し、単一の[]に置き換えました。そうしないと、シリアル化/逆シリアル化できません。

xsd-documentから生成されたクラスでxml-fileを作成する正しい方法を実際には知りません。このようなxmlファイルの例を次に示します。https ://github.com/mlt/schwinn810/wiki/Sample-.TCX-Files

これは私がシリアル化しようとしている私のオブジェクトです(単なる例):

XmlObjects.Tcx20.TrainingCenterDatabase_t tcx = new XmlObjects.Tcx20.TrainingCenterDatabase_t();
XmlObjects.Tcx20.AbstractSource_t abstractSource = new XmlObjects.Tcx20.Application_t();

abstractSource.Name = "TcxCreator";

tcx.Author = abstractSource;
abstractSource = new XmlObjects.Tcx20.Application_t();

XmlObjects.Tcx20.ActivityList_t activityList = new XmlObjects.Tcx20.ActivityList_t();

XmlObjects.Tcx20.Activity_t[] activity = new XmlObjects.Tcx20.Activity_t[1];
XmlObjects.Tcx20.ActivityLap_t[] lap = new ActivityLap_t[1];
XmlObjects.Tcx20.Course_t[] course = new Course_t[1];
XmlObjects.Tcx20.Trackpoint_t[] trackPoint = new Trackpoint_t[1];
XmlObjects.Tcx20.Position_t position = new Position_t();

double lat = 10;
double lon = 11;

position.LatitudeDegrees = lat;
position.LongitudeDegrees = lon;

trackPoint[0].Time = DateTime.Now;
trackPoint[0].Position = position;
lap[0].Track = trackPoint;
activity[0].Lap = lap;

activityList.Activity = activity;

tcx.Activities = activityList;

Line trackPoint [0] .Time = DateTime.Now; 上記のエラーが発生します。しかし、xsd / xmlがどのように見えるかと比較して、classes/xmlを間違って作成することに関連していると思います。

誰かがxsd.exeによって生成されたクラスからxmlを構築する方法に関して正しい方向に私を向けることができますか?

編集:YavgenyPに感謝します!それはそれでした、このコードは機能しています:

        XmlObjects.Tcx20.TrainingCenterDatabase_t tcx = new XmlObjects.Tcx20.TrainingCenterDatabase_t();
        XmlObjects.Tcx20.AbstractSource_t abstractSource = new XmlObjects.Tcx20.Application_t();

        abstractSource.Name = "TcxCreator";

        tcx.Author = abstractSource;
        abstractSource = new XmlObjects.Tcx20.Application_t();

        XmlObjects.Tcx20.ActivityList_t activityList = new XmlObjects.Tcx20.ActivityList_t();

        XmlObjects.Tcx20.Activity_t[] activity = new XmlObjects.Tcx20.Activity_t[1];
        XmlObjects.Tcx20.ActivityLap_t[] lap = new ActivityLap_t[1];
        XmlObjects.Tcx20.Course_t[] course = new Course_t[1];
        XmlObjects.Tcx20.Trackpoint_t[] trackPoint = new Trackpoint_t[1];
        XmlObjects.Tcx20.Position_t position = new Position_t();

        double lat = 10;
        double lon = 11;

        position.LatitudeDegrees = lat;
        position.LongitudeDegrees = lon;

        trackPoint[0] = new Trackpoint_t {Time = DateTime.Now, Position = position};
        lap[0] = new ActivityLap_t {Track = trackPoint};
        activity[0] = new Activity_t {Lap = lap};

        activityList.Activity = activity;

        tcx.Activities = activityList;
4

1 に答える 1

1

Line trackPoint [0] .Time = DateTime.Now; 上記のエラーが発生します

あなたのコードを見てください、あなたはここで前述の配列を初期化します:

XmlObjects.Tcx20.Trackpoint_t[] trackPoint = new Trackpoint_t[1];

ただし、アレイ内のTrackpoint_t ITSELFを初期化することはありません。これにより、これが発生します。

trackPoint[0].Time = DateTime.Now; 

失敗する(trackPoint [0]はまだnullです)

于 2012-05-26T09:30:17.703 に答える