16

DatacontractSerializerdomainModel を xml ファイルにシリアル化するために使用しています。以下のような出力が得られます。

<z:anyType xmlns:i="http://www.w3.org/2001/XMLSchema-instance" z:Id="1" xmlns:d1p1="DCSerialization_IGITApproach" i:type="d1p1:X" xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/">
  <d1p1:Name z:Id="2">Ankit</d1p1:Name>
  <d1p1:PointsDictionary xmlns:d2p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays" z:Id="3" z:Size="1">
    <d2p1:KeyValueOfstringPointsArrayq9VX7VJJ>
      <d2p1:Key z:Id="4">key1</d2p1:Key>
      <d2p1:Value xmlns:d4p1="http://schemas.datacontract.org/2004/07/SerializationApproach" z:Id="5">
        <d4p1:points z:Id="6" z:Size="2">
          <d2p1:double>45.5</d2p1:double>
          <d2p1:double>546.45</d2p1:double>
        </d4p1:points>
      </d2p1:Value>
    </d2p1:KeyValueOfstringPointsArrayq9VX7VJJ>
  </d1p1:PointsDictionary>
</z:anyType>

そして、これらの「d1p1」名前空間プレフィックスを取り除き、の</PointDictionary>代わりに like タグが必要です</d1p1:PointsDictionary>。クラスのプロパティに DataMember 属性を配置しようとしましたが、問題の多くは解決しません。出力 XML ファイルはエンド ユーザーが編集できるため、上記の XML ファイルよりも見栄えの良い XML ファイルが必要です。

最優先事項は、コードのみで制御することです。それが不可能な場合は、XSLT またはその他のスキーマを使用します。

4

3 に答える 3

4

DataContractSerializerプレフィックスをあまり制御できないようです。XML シリアライゼーションと名前空間プレフィックスへの回答はXmlSerializer、名前空間プレフィックスを制御する場合に 使用することを提案しています。

ドメイン モデルの名前空間プレフィックスを完全に削除するかどうかについて、あなたの質問は明確ではありませんでした。上記のサンプルには、d1p1、d2p1、d4p1 の名前空間プレフィックスがいくつかあります。 XSL 変換で XML ファイルの名前空間を変更すると、XSLT を使用したプレフィックスの名前変更に関するガイダンスが提供されます。

于 2012-08-15T14:29:39.527 に答える
0

XML にシリアル化しようとしているクラスが同じ名前空間内にあることを確認するだけで、これらのプレフィックスを取り除くことができるはずです。たとえば、ApplicationListResponse と Application. 以前は、名前空間は Models.Responses と Models.Responses.Application でした。両方の名前空間を「モデル」に変更すると、XML 出力のプレフィックスが削除されました。

于 2016-11-01T15:09:01.913 に答える