【问题标题】:Deserialization of JSON in c#C#中JSON的反序列化
【发布时间】:2015-07-14 14:44:01
【问题描述】:

我有以下JSON

{
    "employee" : {
        "property1" : "value1",
        "property2" : "value2",
        //...
    }
}

像这样的班级

public class employee
{
    public string property1{get;set;}
    public string property2{get;set;}
    //...
}

如果我需要在我的 JSON 中添加 property3,那么我也需要在我的类中进行更改。 即使我更改了 JSON(添加另一个属性,如 property3),我如何反序列化为一个类。 像newtonsoft.json 这样的序列化/反序列化技术与类紧密耦合。 在 c# 的可移植类中deserialize 这类JSON 有更好的方法/工具吗?

【问题讨论】:

  • 一种方法是自定义 JSON-Deserialiter,f.E.看这里:stackoverflow.com/questions/8030538/… 使用一点反射魔法,您可以使用有效的 setter 检查所有属性,并按命名约定将其映射到 JSON-Data。
  • 您是否只想反序列化为某种匿名类型,以便您可以读取数据而无需关心它是什么类型的对象?如果是这样,newtonsoft 库会让你这样做。
  • 这个问题并不是关于反序列化本身,它更多的是关于基于动态输入数据向 C# 类动态添加属性。

标签: c# json serialization


【解决方案1】:

Newtonsoft 没有与强类型紧密耦合。您也可以反序列化动态类型。见类似问题here(How to read the Json data without knowing the Key value)

【讨论】:

    【解决方案2】:

    你可以试试 .net 的 JavaScriptSerializer (System.Web.Script.Serialization.JavaScriptSerializer)。如果添加或删除某些字段,它会正常反序列化对象。

    namespace ConsoleApplication8
    {
    public class Person
    {
        public int PersonID { get; set; }
        //public string Name { get; set; }
        public bool Registered { get; set; }
        public string s1 { get; set; }
    }
    class Program
    {
        static void Main(string[] args)
        {
            var s = "{\"PersonID\":1,\"Name\":\"Name1\",\"Registered\":true}";
            var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
            var o = serializer.Deserialize<Person>(s);
            ;
        }
    }
    }
    

    【讨论】:

      【解决方案3】:

      如果我们可以使用“字典string,string>员工”,上面的json就可以反序列化了。

      【讨论】:

        猜你喜欢
        • 2014-01-06
        • 2012-08-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多