Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 韩元';t映射到复杂类和集合_C#_Json - Fatal编程技术网

C# 韩元';t映射到复杂类和集合

C# 韩元';t映射到复杂类和集合,c#,json,C#,Json,我有这门课 namespace Watermark { public class Template { int Width { get; set; } = 700; int Height { get; set; } = 700; Picture Picture { get; set; } List<Shape> Shape { get; set; } List<Word> Wo

我有这门课

namespace Watermark
{
    public class Template
    {
        int Width { get; set; } = 700;
        int Height { get; set; } = 700;
        Picture Picture { get; set; }
        List<Shape> Shape { get; set; }
        List<Word> Word { get; set; }
    }

    public class Picture
    { 
        int X { get; set; }
        int Y { get; set; }
    }

    public class Shape
    { 
        List<PointF> Point { get; set; }
        string Color { get; set; }
    }

    public class Word
    { 
        string Text { get; set; }
        int Width { get; set; }
        HorizontalAlignment Alignment { get; set; } = HorizontalAlignment.Center;
        string Color { get; set; }
        string FontFamily { get; set; }
        int Size { get; set; }
        FontStyle Style { get; set; } = FontStyle.Regular;
    }
}
我尝试将JSON文件映射到我的类

        var jsonString = File.ReadAllText("appsettings.json");
        var jsonModel = JsonSerializer.Deserialize<Template>(jsonString);
var jsonString=File.ReadAllText(“appsettings.json”);
var jsonModel=JsonSerializer.Deserialize(jsonString);
但是所有的复杂对象都显示为null,我做错了什么


这里有两个问题:


  • 正如@dbc在评论中指出的,您的属性不是公共的
  • 您缺少根级别的类。您需要添加此类:

    public class RootObject
    {
        public string FolderPath { get; set; }
        public string FolderName { get; set; }
        public Template Template { get; set; }
    }
    
    并反序列化为该模板,而不是
    模板

    var jsonModel = JsonSerializer.Deserialize<RootObject>(jsonString);
    
    var jsonModel=JsonSerializer.Deserialize(jsonString);
    
  • 如果同时执行这两项操作,JSON将反序列化属性


    Fiddle:

    您的房产不是公共的。请参阅:.@SomnathGhosh:Picture位于模板内,因为我想映射到属性
    Picture
    inside
    template
    class
    Picture Picture{get;set;}
    @dbc:公开了所有内容,仍然是同一个问题,我认为这里的问题不是公开的,因为宽度和高度映射得很好;您正在代码中将它们初始化为700。该值恰好与JSON中定义的值匹配。我添加了一个说明如何修复代码的答案。@BrianRogers:天哪,你说得对
    var jsonModel = JsonSerializer.Deserialize<RootObject>(jsonString);