繁体   English   中英

将json反序列化为c#对象

[英]deserializing json to c# object

我的C#是不是很好,但我想这反序列化JSON我的文件,以C#对象:

[
{
    "command":"",
    "name":"eee",
    "children":
    [
        {
            "command":"Report",
            "name":"x",
            "children":[],
            "path":"wwwwww",
            "params":
            {
                "PeriodType":"1i",
                "District":"0i"
            }
        },...
    ],
    "path":"",
    "params":{}
},...

对于这个模式,我创建了这个对象:

[DataContract]
public class ListCommands
{
    [DataMember]
    public List<Commands> commandList { get; set; }
    [DataContract]
    public class Commands
    {
        [DataMember]
        public string command { get; set; }
        [DataMember]
        public string name { get; set; }
        [DataMember]
        public string path { get; set; }
        [DataMember(Name = "params")]
        public Params parameters { get; set; }
        [DataMember]
        public List<Commands> children { get; set; }
    }
}
}

和:

public class Params
{
    [DataMember]
    public string PeriodType { get; set; }
    [DataMember]
    public string District { get; set; }
}
}

而且我正在使用此代码将json反序列化为c#对象:

public static void ReadJsonFile()
    {
        ListCommands comList = new ListCommands();
        //List<Commands> comList = new List<Commands>();
        string root = HttpContext.Current.Server.MapPath("~/File");
        using (FileStream stream = File.OpenRead(root + "\\commands.json"))
            comList  = (ListCommands)new DataContractJsonSerializer(typeof(ListCommands)).ReadObject(stream);
    }
}

但是不幸的是我得到了这个错误:

Additional information: There was an error deserializing the object of type Notifications.Contracts.ListCommands. Encountered unexpected character 'ï'.

问题出在哪里?我有一个json文件,我想读取此文件然后转换为c#对象。

根据@SirRufo的建议

1 -我已经使用这种方式Json.Net的:

string root = HttpContext.Current.Server.MapPath("~/File");
FileStream stream = File.OpenRead(root + "\\commands.json");
StreamReader reader = new StreamReader(stream);
var comList = JsonConvert.DeserializeObject<dynamic>(reader.ReadToEnd());

以上错误消失了。

2-通过此链接,我可以运行以前的代码: 在此处输入链接说明

One of the reasons for this could be that the input file that contains the JSON-encoded data is created with a binary encoding or it has a Byte Order Mark(BOM) byte sequence for a binary encoded file.
For e.g. The UTF-8 representation of the BOM is the byte sequence (0xEF,0xBB,0xBF) in the beginning of the file.
**Note:** You will see this if you created a .JSON file(or a binary file) using visual studio. 

反序列化的数据格式不同。

  1. 更改json数据。

    {“ commandList”:[{“ command”:“”,“ name”:“ eee”,“ children”:[{“ command”:“ Report”,“ name”:“ x”,“ children”:[] “路径”: “wwwwww”, “PARAMS”:{ “PeriodType”: “1I”, “区”: “0I”}}], “路径”: “”, “PARAMS”:{}}]}

或2.更改反序列化目标类型

comList.commandList = (List<ListCommands.Commands>)new DataContractJsonSerializer(typeof(List<ListCommands.Commands>)).ReadObject(stream);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM