Typescript嵌套类,反序列化json

时间:2017-10-15 20:51:33

标签: json angular nested

我有csharp类如下:

    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;
}

我有一个打字稿类如下:

    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;
}

我的Api代码如下。

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"); }
    }
}

我有一个服务于JSON对象的asp.net核心Web Api应用程序。

我无法得到我的&#34;目标&#34;嵌套类及其嵌套类&#34;目标&#34;属性设置为角度应用。

它似乎是对象类型。我无法获得价值。

我该如何解析它?

1 个答案:

答案 0 :(得分:0)

由于我对MongoDb了解不多,接下来尝试: 也许List-Initializer可以提供帮助:

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;
}