1

ラッパー クラスを使用してこれを行う例を見たことがありますが、より良い (より簡単な) 方法があるかどうか疑問に思っていました。

私のクラスは次のとおりです。

public class PartData
{
  public List<PartInfo> PartList { get; set; }
}


public class PartInfo
{
  public string PartNumber { get; set; }

  public string OEMNumbers { get; set; }

  public List<VehicleApplication> VehicleApplications { get; set; }
}


public class VehicleApplication
{

  public string Year { get; set; }

  public string Make { get; set; }

  public string Model { get; set; }
}

コードのシリアル化:

//serialize
private void serialize()
{
   PartData p = GetParts();
   SerializeClass(p);
}

public void SerializeClass(object instance)
{
  var serializer = new XmlSerializer(typeof(PartData));

  using (var writer = new StreamWriter("C:\\TestFile.xml"))
  {
    serializer.Serialize(writer, instance);
  }
}

シリアル化すると、次の出力が得られます。

 <PartData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <PartList>
    <PartInfo>
      <PartNumber>12345</PartNumber>
      <OEMNumbers>14556, 14557, 14558, 14559</OEMNumbers>
      <VehicleApplications>
        <VehicleApplication>
          <Year>2001</Year>
          <Make>Ford</Make>
          <Model>F150</Model>
        </VehicleApplication>
        <VehicleApplication>
          <Year>2001</Year>
          <Make>Ford</Make>
          <Model>F150</Model>
        </VehicleApplication>
        <VehicleApplication>
          <Year>2001</Year>
          <Make>Ford</Make>
          <Model>F150</Model>
        </VehicleApplication>
        <VehicleApplication>
          <Year>2001</Year>
          <Make>Ford</Make>
          <Model>F150</Model>
        </VehicleApplication>
      </VehicleApplications>
    </PartInfo>
  </PartList>
</PartData>

理想的には、PartNumber を次のような属性にしたいと思います。

 <PartData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <PartList>
    <PartInfo>
      <PartNumber Id ="12345">
      <OEMNumbers>14556, 14557, 14558, 14559</OEMNumbers>
      <VehicleApplications>
        <VehicleApplication>
          <Year>2001</Year>
          <Make>Ford</Make>
          <Model>F150</Model>
        </VehicleApplication>
        <VehicleApplication>
          <Year>2001</Year>
          <Make>Ford</Make>
          <Model>F150</Model>
        </VehicleApplication>
        <VehicleApplication>
          <Year>2001</Year>
          <Make>Ford</Make>
          <Model>F150</Model>
        </VehicleApplication>
        <VehicleApplication>
          <Year>2001</Year>
          <Make>Ford</Make>
          <Model>F150</Model>
        </VehicleApplication>
      </VehicleApplications>
    </Partnumber>
    </PartInfo>
  </PartList>
</PartData>

私は追加しようとしました:

public class PartInfo
{
  [XmlAttribute("Id")]
  public string PartNumber { get; set; }

  public string OEMNumbers { get; set; }

  public List<VehicleApplication> VehicleApplications { get; set; }
}

しかし、作成します:

<PartInfo Id="12345">

私が必要なとき:

<PartNumber Id="12345">
4

1 に答える 1

2

これがあなたが達成しようとしていることを達成する唯一の方法だと思います

public class PartDetail
{
  [XmlAttribute]
  public string ID{ get; set; }

  public string OEMNumbers { get; set; }

  public List<VehicleApplication> VehicleApplications { get; set; }
}

public class PartInfo
{
  public PartDetail { get; set; }
}

あなたの最初のコメントへの答えとして、これはそれを達成する最も簡単な方法です。別の方法は、カスタムシリアライザーを書くことです

于 2013-04-10T15:30:37.013 に答える