首页 文章

能够反序列化字符串类型而不是对象类型

提问于
浏览
0

我正在使用C#和JSON.NET . 以下是两种类型 .

JSON object -  var user = { "name": "test", "title": "mytitle"};
   JSON String -  var user1 = "{ \"name\": \"test\", \"title\": \"mytitle\" }";

使用Newtonsoft.Json反序列化JSON对象 . 我正在处理JSON的C#代码 .

public class sampledata
      {
        [JsonProperty("name")]
        public string name { get; set; }

         [JsonProperty("title")]
        public string title { get; set; }
      }
     public void SampleEvent(string param)
        {

            sampledata s = JsonConvert.DeserializeObject<sampledata>(param);
         }

When I got JSON String in param the deserialization is fine. 但是当我在param中获得JSON对象时 - 我得到的第一个错误是

“无法将当前JSON数组(例如[1,2,3])反序列化为类型'UCRS.MainWindow sampledata',因为该类型需要JSON对象(例如{”name“:”value“})才能正确反序列化 . 修复此错误要么将JSON更改为JSON对象(例如{“name”:“value”}),要么将反序列化类型更改为数组或实现集合接口的类型(例如ICollection,IList),如List可以从JSON数组反序列化.JsonArrayAttribute也可以添加到类型中以强制它从JSON数组反序列化 . 路径'',第1行,位置1 .

所以我将代码更改为:

List<sampledata> s = JsonConvert.DeserializeObject<List<sampledata>>(param);

然后我面临着不同的问题

“解析值时遇到意外的字符:o . 路径'',第1行,位置1”

当我在网页中引发一些事件时,我正在使用webbrowser objectforscripting在c#中处理该事件 . 我总是把JSON对象作为param . 如何在C#中反序列化JSON对象?请帮忙

2 回答

  • 0

    更新的代码行:

    List<sampledata> s = JsonConvert.DeserializeObject<List<sampledata>>(param);
    

    很好 .

    这里的问题是当你试图反序列化到列表时,反序列化器期望一个数组 .

    尝试使它成为一个数组 . 将这行代码添加到param字符串:

    param ="["+param+"]";//make it an array before deserialization
    

    完整代码:

    public class sampledata
      {
        [JsonProperty("name")]
        public string name { get; set; }
    
         [JsonProperty("title")]
        public string title { get; set; }
      }
     public void SampleEvent(string param)
        {
            param ="["+param+"]";//make it an array before deserialization
            List<sampledata> s = JsonConvert.DeserializeObject<List<sampledata>>(param);
         }
    
  • 0

    它很简单..两者兼顾

    string jsonObject = @"{""name"":""test"",""title"":""mytitle""}";
    var jsonString = "{ \"name\": \"test\", \"title\": \"mytitle\" }";
    
    var values1 = JsonConvert.DeserializeObject<Dictionary<string, string>>(jsonObject);
    var values2 = JsonConvert.DeserializeObject<Dictionary<string, string>>(jsonString);
    

    这也有效

    var values3 = JsonConvert.DeserializeObject<sampledata>(jsonObject);
    

    我创建了JObject

    JObject jObject = new JObject
               {
                   {"name", "test" },
                   {"title", "mytitle" }
               };
               string jObjectStr = jObject.ToString();
    var values = JsonConvert.DeserializeObject<sampledata>(jObjectStr);
    

相关问题