私はタイプがPersonのC#リストを持っています。このリストはJSONデータ形式に変換する必要があります。 Person C#クラスは次のようになります。リストAをリストBと同じように設定するには、B上に存在するプロパティは存在しません。A
public class Person
{
public int ID { get; set; }
public static int PSID = 1;
public string name { get; set; }
public string nameToken { get; set; }
public double DOB { get; set; }
public List<Award> awards { get; set; }
public List<Link> links { get; set; }
public Person()
{
awards = new List<Award>();
links = new List<Link>();
ID = PSID;
PSID++;
}
}
人のC#リストをJSONに変換する必要があります。私はPersonJSと呼ばれるC#で別のクラスを作った。唯一の違いは、JSONフロントエンドでは不要なプロパティの一部を削除したことです。これはPerson C#クラスとまったく同じです。すなわち:nameToken、PSID。
public class PersonJS
{
public int ID { get; set; }
public string name { get; set; }
public double DOB { get; set; }
public List<AwardJS> awards { get; set; }
public List<Link> links { get; set; }
}
PersonJSのプロパティの1つは、タイプAwardJSである賞と呼ばれるリストです。 Person.awards ListをPersonJS.awards Listと同じにしようとするので、以下の問題が発生します。しかし、それらは相違型であるため、両方のリストを等しくすることはできません。なぜなら、JSONデータがC#で使用したすべてのプロパティを必要としないからです。そこで私はAwardとAwardJSという2つのクラスを作りました。唯一の違いは、AwardにはfilmWebTokenというプロパティが含まれていますが、AwardJSには含まれていないという点です。私のコードで
public class Award
{
public int filmID { get; set; }
public int categoryID { get; set; }
public string filmWebToken { get; set; }
}
public class AwardJS
{
public int filmID { get; set; }
public int categoryID { get; set; }
}
私はタイプ人のC#のリスト内のすべてのプロパティを反復処理し、私はpersonjsオブジェクトを作成し、PersonJS C#のリストに追加しようとします。 PersonJSのリストは、JSONとしてフロントエンドに戻されます。ただし、PersonJSクラスの特典プロパティがPersonの特典プロパティと異なるため、「暗黙のうちにAwardJSタイプを賞品に変換できません」というエラーが表示されます。このエラーが発生する理由は、PersonJSにPersonクラスに存在するfilmWebTokenが含まれていないためです。 JSONデータのプロパティではないため、filmWebTokenをPersonJSリストに入れることは望ましくありません。しかし、Person.Awardにプロパティフィールドがあるので、私はまだアクセスしたいと思います:filmIDとCategoryID filmWebTokenフィールドを無視/迂回する方法はありますか? 、
public AwardJS ToAwardJS() {
return new AwardJS { filmID = this.filmID, categoryID = this.categoryID };
}
次にあなたがPersonJS
オブジェクトを作成するときに実行します:
List<Person> allPersons = DataRepository.GetAllPersons(); // contains the C# data
List<PersonJS> personjs = new List<PersonJS>(); // empty to start with
foreach (var person in allPersons)
{
foreach (var award in person.awards)
{
personjs.Add(
new PersonJS
{
ID = person.ID,
links = person.links,
name = person.name,
DOB = person.DOB,
awards = person.awards // The types are not equal: Person contains filmWebToken whereas PersonJS does not
});
}
}
ルックス'Award'タイプの関連する部分を新しい' PersonJS'に投影する方法と非常によく似た新しいAwardJSのisntanceに投影するだけです。 LINQは値を投影するための 'Select'メソッドでこれに取り組むのに良い方法です。 –
Automapperはこの種のものにはかなり良いです。 http:// automapper。org/ –
@AdamHouldsworthあなたは例を挙げることができます – hoChay