2017-10-15 30 views
0

をデシリアライズ、クラスをネストされました。次のように活字体は、次のように私はCSHARPクラスを持っているJSON

APIメソッドは、次のとおり

public interface IRepository<T> 
    { 
     Task<IEnumerable<T>> GetAll(); 
     Task<T> Get(string id); 
     Task Add(T item); 
     Task<DeleteResult> Remove(string id); 
     //Task<UpdateResult> Update(string id, string body); 
     Task<UpdateResult> Update(string id, T item); 

     //// demo interface - full document update 
     //Task<ReplaceOneResult> UpdateDocument(ObjectId id, string body); 

     // should be used with high cautious, only in relation with demo setup 
     Task<DeleteResult> RemoveAll(); 
    } 

[Route("api/[controller]")] 
     public class StrategicPlansController : Controller 
     { 
      private readonly IRepository<StrategicPlan> _repository; 

      public StrategicPlansController(IRepository<StrategicPlan> repository) 
      { 
       _repository = repository; 
      } 

      // GET: api/StrategicPlan 
      [HttpGet] 
      public Task<string> Get() 
      { 
       return GetInternal(); 
      } 

      private async Task<string> GetInternal() 
      { 
       var items = await _repository.GetAll(); 
       return JsonConvert.SerializeObject(items); 
      } 
    } 

    public class StrategicPlanRepository : IRepository<StrategicPlan> 
    { 
     private readonly MongoContext _context = null; 

     public StrategicPlanRepository(IOptions<Settings> settings) 
     { 
      _context = new MongoContext(settings); 
     } 

     public async Task<IEnumerable<StrategicPlan>> GetAll() 
     { 
      try 
      { 
       return await _context.StrategicPlans.Find(_ => true).ToListAsync(); 
      } 
      catch (Exception ex) 
      { 
       // log or manage the exception 
       throw ex; 
      } 
     } 

}

public class MongoContext 
{ 
    private readonly IMongoDatabase _database = null; 

    public MongoContext(IOptions<Settings> settings) 
    { 
     var client = new MongoClient(settings.Value.ConnectionString); 
     if (client != null) 
      _database = client.GetDatabase(settings.Value.Database); 
    } 

    public IMongoCollection<StrategicPlan> StrategicPlans 
    { 
     get { return _database.GetCollection<StrategicPlan>("StrategicPlans"); } 
    } 
} 

Iは、JSONオブジェクトをサービングasp.netコアウェブAPIアプリケーションを持っています。

私は "ゴール"ネストされたクラスを取得できません。そのネストされたクラス "ターゲット"プロパティは、角度アプリケーションで設定されています。

オブジェクトタイプと思われます。私は価値を得ることができません。

どのように解析できますか?私はMongoDBの、次の試行について十分に知らなかったとして

+1

あなたが意味する、プロパティが設定されていませんか? Web-APIからAPIメソッドのコードを提供していただけますか? – Nikolaus

+0

はい、プロパティは設定されていません。 – Seyfullah

+0

web apiメソッドを追加しました。 – Seyfullah

答えて

0

: をたぶん初期化子リストは助けることができる:

public class StrategicPlan 
{ 
    [BsonId] 
    [BsonRepresentation(BsonType.ObjectId)] 
    public string Id { get; set; } 
    public string Unit { get; set; } 
    public List<Goal> Goals { get; set; } = new List<Goal>(); 

    public class Goal 
    { 
     public string GoalName { get; set; } 
     public int ImplementationRatio { get; set; } 
     public List<Target> Targets { get; set; } = new List<Target>(); 

     public class Target 
     { 
      public string TargetName { get; set; } 
      public int ImplementationRatio { get; set; } 
     } 
    } 

    public DateTime UpdatedOn { get; set; } = DateTime.Now; 
    public DateTime CreatedOn { get; set; } = DateTime.Now; 
    public int UserId { get; set; } = 0; 
} 
+0

MongoDB.Driver dbメソッドを使用しています。 typeのStrategicPlansプロパティにincludeメソッドがありません。 var p = _context.StrategicPlans.Find(_ => true).ToList(); はコントローラクラス内のすべてのサブエンティティをフェッチします。 私の質問に私のMongoContextクラスを追加しました。 – Seyfullah

+0

http:// localhost:5000/api/strategicplansで同じ応答が返ってきたという変更を加えた後、 問題は、使用した角度ネストされたクラスバインディングにある可能性がありますか? – Seyfullah

+0

ブラウザでrequest-Bodyとresponse-bodyを調べることはできますか?データベースには全く目標がありますか? – Nikolaus

関連する問題