これで「d3p1」ノード名が何を意味するのか誰か教えてもらえますか?
<ActionMessage>
<Data xmlns:d3p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
<d3p1:anyType i:type="Agreement">
</d3p1:anyType>
<d3p1:anyType i:type="Agreement"> shortened
私のasp webapiプロジェクトのデフォルトのシリアル化について、「見栄えが悪い」「d3p1が変更されたらどうなるか」というコメントをたくさん受け取りました。私はそれが機械可読であると言います。でもなんでこんな形なのか気になります。
詳細は次のとおりです。コントローラーにGET動詞があり、列挙可能なのを返しますActionMessage
public IEnumerable<ActionMessage> Get(Guid)
ActionMessage
リストにはさまざまなジェネリック タイプのアクション メッセージが含まれるため、ジェネリックにすることはできません (それが役立つ場合でも)。「新契約」、「鍵変更」など。
ActionMessage<NewAgreement>
orなどのように見えますActionMessage<KeyChange>
。get は多くの「タイプ」のアクション メッセージを返すため、get でこれを行う方法はありません。基本クラスまたはインターフェイスの外。IEActionMessage<IMessage>
ですが、これらのメッセージには共通点がありません。
アクション メッセージは次のようになります。
public class ActionMessage
{
[DataMember]
public Status Status { get; set; }
[DataMember]
[XmlElement(ElementName = "Agreement")]
[XmlArrayItem(ElementName = "testnode")]
public List<object> Data { get; set; }
[DataMember]
public MessageTypes Type { get; set; }
[DataMember]
public Guid Id { get; set; }
}
「問題のある」XML は data プロパティに由来することに注意してください。
考え?XML の可読性は重要ですか? datacontract シリアライザーから xml シリアライザーに切り替えるという面倒な作業を行う必要がありますか? これにより、要素名の属性が有効になる可能性がありますが、私はこれをすべてバニラのままにしておくことを好みます。生成された XML を完全に制御することはできますが、本当に必要なのか、それとも気にする必要があるのでしょうか?