1

XML を生徒とともに返す Web サービスを呼び出しています。すべての学生をデータベース (既存の学生テーブル) に保存する必要があります。

現在、XML を取得する XMLStudentParser クラスがありますが、各学生レコードをデータベースに格納する方法がわかりません。XMLReader を使用して学生をループ処理し、各学生を に追加してからList<Student>、そのリストをデータベースに保存しますか?

Web サービス経由のリモート XML。

<Response>
  <Result>True</Result>
  <Table>
    <Students>
      <Student>
        <StudentID>14165</StudentID>
        <StudentName>Jeff Smith</StudentName>
        <GroupId>9109</GroupId>
      </Student>
      <Student>
        <StudentID>14168</StudentID>
        <StudentName>Mary Jones</StudentName>
        <GroupId>9109</GroupId>
      </Student>
    </Students>
  </Table>
</Response>

私の学生モデル

public class Student
{
    public int StudentId { get; set; }
    public string FullName { get; set; }

    public int GrpId { get; set; }
}

ベスト プラクティス コードは次のようになります。

  • Web サービスから XML を取得する
  • 各学生を解析する
  • 各学生をデータベースに保存する
4

3 に答える 3

1

以前の回答で述べたように、XML 要素属性を追加してオブジェクト定義を XML と一致させることは、おそらく XML を逆シリアル化する最も簡単な方法です。

[XmlElement]
public class Response
{
    [XmlElement]
    bool Result;
    public tbl[] Table;
}
public class tbl
{
    public Student[] Students;
}

public class Student
{
    public int StudentId { get; set; }
    public string FullName { get; set; }
    [XmlElement(ElementName = "GroupId")]    
    public int GrpId { get; set; }
}

その後、これらの値を学生と保護者のステージング テーブルに挿入し、SQL MERGE ステートメントを使用してメイン データ テーブルを更新できます。

于 2012-10-31T15:56:53.673 に答える
0
  • StudentDTO オブジェクトへの XML シリアル化。
  • StudentDTO から Student へのマッピング。
  • マッピングされた学生が DB に保存されます。

StudentDTO は、Web からの XML 定義から Student クラスを切り離したいので、ここで推奨されます。XML 定義が変更された場合でも、DTO を変更するだけで済み、Student の実装は変更しません。

潜在的な非製品コード:

[XmlElement]
public class StudentDTO 
{
    [XmlElement]
    public string StudentName {get;set;}
}

[XmlElement]
public class StudentsDTO : List<StudentDTO> 
{
}

public class Student
{
    public string Name {get;set;}
}

//Ideally on big System, Mapper class would be a generic on the lines of Mapper<Source,Target>
//Mapper<StudentDTO,Student> and based on some rules it would do mapping.
public class StudentDTOToStudentMapper
{
    public Student GetStudentForDTO(StudentDTO dto)
    {
        //create object of student
        // Map corresponding property of StudentDTO to Student
        // e.g. StudentName to Name
    }
}

public class Client
{
    public static void Main(DBHelper dbHandler, XMLSerialiser seriliaser, WebService serviceToCall,StudentDTOToStudentMapper mapper )
    {
        // XmlDocument/Object obj = serviceToCall.GetStudentsXML();
        // StudentsDTO students = Seriliaser.Deserialise(XML);
        // IEnumerable<Student> studentObjects = from eachDTO in students 
        //                   select mapper.GetStudentForDTO(eachDTO)
        // bool IsSaved = dbHandler.Save(students);
        // Based on IsSaved show the status.
    }   
}
于 2012-10-31T10:49:55.813 に答える
0

Student クラスのプロパティを変更して Xml 要素名に一致させたり、どの XML 値がどのクラス プロパティに割り当てられるかを示す属性でプロパティを装飾したりできる場合は、.Net を使用して XML を 1 行で List Students に逆シリアル化できます。 .

次に、通常どおり DB に永続化します。

これが例です

于 2012-10-31T10:47:04.573 に答える