【问题标题】:Serialize and deserialize singles values in JSON.NET C#?在 JSON.NET C# 中序列化和反序列化单值?
【发布时间】:2015-04-04 05:21:42
【问题描述】:

我使用 VS 2012、.NET 3.5、JSON.NET。
我有几个单一的值,例如 int、字符串类型。
我用~ separator 设置字符串值。 我将字符串序列化,将其保存在文件中。
然后,我反序列化文件中的字符串并拆分字符串。

我想避免由~ character 拆分并且我想避免创建一个新类型(具有属性的类实体 get;set )。

我认为使用匿名类型或动态类型很复杂。

有什么建议吗?

单元测试现在工作:

    var value1 = "C20100101_0001";
    var value2 = 678901;
    var value3 = "lorem ipsum text %&/() more test";
    var value4 = "email@gmail.com";
    string json = "{0}~{1}~{2}~{3}".FormatString(value1, value2, value3, value4);
    var ser = JsonConvert.SerializeObject(json);
    ser = JsonConvert.SerializeObject(json, Formatting.Indented);
    System.IO.File.WriteAllText(@".\path.txt", ser);

    var deser = System.IO.File.ReadAllText(@".\path.txt");
    var json2 = JsonConvert.DeserializeObject<string>(deser);
    Assert.AreEqual(json, json2);

    var data = json2.Split(new char[] { '~' });
    Assert.IsNotNull(data);
    Assert.AreNotEqual(0, data.Length);
    Assert.AreEqual(value1, data[0]);

【问题讨论】:

    标签: c# serialization json.net deserialization


    【解决方案1】:

    据我了解,您可以将所有内容转储到一个数组中并对其进行序列化:

    var list = new object[]{"C20100101_0001", 678901, "lorem ipsum text %&/() more test", "email@gmail.com"};
    
    var json = JsonConvert.SerializeObject(list);
    
    var deserialized = JsonConvert.DeserializeObject<object[]>(json);
    

    【讨论】:

      【解决方案2】:

      使用@EagleEak 回答https://stackoverflow.com/a/28325833/206730,单元测试工作的解决方案:

              var value1 = "C20100101_0001";
              var value2 = 678901;
              var value3 = "lorem ipsum text %&/() more test";
              var value4 = "email@gmail.com";
              var list = new object[] { value1, value2, value3, value4 };
              ser = JsonConvert.SerializeObject(list, Formatting.Indented);
              System.IO.File.WriteAllText(@".\path.txt", ser);
      
              deser = System.IO.File.ReadAllText(@".\path.txt");
              var deserialized = JsonConvert.DeserializeObject<object[]>(deser);
              Assert.IsNotNull(deserialized);
              Assert.AreNotEqual(0, deserialized.Length);
              Assert.AreEqual(value1, deserialized[0]);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-09
        • 1970-01-01
        • 2012-12-18
        • 1970-01-01
        相关资源
        最近更新 更多