子クラス「job」のすべてのプロパティについて、CDATAタグでラップされたXMLにシリアル化するという醜い要件があります。仕様は次のとおりです:http: //www.indeed.com/intl/en/xmlinfo.html
私が見つけたすべての答えは、クラス全体ではなく、1つまたは2つのプロパティに適したアプローチを示唆しています。例:XmlSerializerを使用して文字列をCDATAとしてどのようにシリアル化しますか?
その記事のコメントの1つは、個々のクラスにIXmlSerializableを実装することを提案しています。私のジョブクラスのすべてのプロパティにはCDATAラッパーが必要であり、他のどこにもこの要件がないため、より良いアプローチのように思えます。ただし、これを行うときに利用できるシリアライザーをオーバーライドするプロパティごとのメンバーがあれば、さらに良いでしょう。
CDATAの実装を200行のコードから10行に減らす方法についてのアイデアはありますか?CDATA要件がなければ、これがいかに簡単であるかがわかります。
public class job {
public string title { get; set; }
public DateTime date { get; set; }
public int referencenumber { get; set; }
public string url { get; set; }
public string company { get; set; }
public string city { get; set; }
public string state { get; set; }
public string country { get; set; }
public string postalcode { get; set; }
public string description { get; set; }
public string salary { get; set; }
public string category { get; set; }
public string experience { get; set; }
public job(DataModel.PostedJob postedJob, UrlHelper urlHelper) {
country = "US";
category = "contract, project, consulting";
title = postedJob.Title;
date = postedJob.PostedOn;
referencenumber = postedJob.Id;
url = urlHelper.Action(MVC.SearchJobs.Index(postedJob.Id));
company = postedJob.Company;
city = postedJob.City;
state = postedJob.State;
postalcode = postedJob.PostalCode;
description = postedJob.Description;
experience = postedJob.MinYears.ToString() + "+ years";
}
public job() { }
}
編集:現在、ここに示すMvcContrib "XmlResult"コードスニペットを使用してこれをシリアル化していることに注意してください:コントローラーのアクションからXMLをActionResultとして返しますか?...プロパティ名自体の従来とは異なるケースは、上記でリンクされた仕様で必要とされるXMLスキーマを反映しています。ビューモデルのプロパティは通常、コンシューマーと緊密に結合されているため、適切だと思いましたが、自由に修正してください。