Je classe csharp comme suit:Tapuscrit classe imbriquée, désérialisation JSON
public class StrategicPlan
{
[BsonId]
[BsonRepresentation(BsonType.ObjectId)]
public string Id { get; set; }
public string Unit { get; set; }
public List<Goal> Goals { get; set; }
public class Goal
{
public string GoalName { get; set; }
public int ImplementationRatio { get; set; }
public List<Target> Targets { get; set; }
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;
}
J'ai une classe dactylographiée comme suit:
export class StrategicPlan {
constructor(jsonStr: string) {
let jsonObj: any = JSON.parse(jsonStr);
for (let prop in jsonObj) {
this[prop] = jsonObj[prop];
}
}
Id: string;
Unit: string;
Goals: [
{
GoalName: string,
ImplementationRatio: number,
Targets: [
{
TargetName: string;
ImplementationRatio: number;
}
]
}];
UpdatedOn: Date;
CreatedOn: Date;
UserId: number;
}
Mes codes apicoles sont les suivants.
méthodes apicoles sont les suivantes:
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"); }
}
}
J'ai un noyau asp.net application Web APIs au service des objets JSON.
Je ne peux pas obtenir ma classe imbriquée "Objectifs" et sa propriété "Cibles" de classe imbriquée est définie dans une application angulaire.
Il semble que le type d'objet. Je ne peux pas avoir de valeurs.
Comment puis-je l'analyser?
Vous voulez dire, la propriété est définie non? Pouvez-vous s'il vous plaît fournir le code de la méthode API à partir de votre Web-API? – Nikolaus
Oui, la propriété n'est pas définie. – Seyfullah
J'ai ajouté des méthodes web api. – Seyfullah