【问题标题】:JSON object from Stringified value来自字符串化值的 JSON 对象
【发布时间】:2018-05-20 20:21:22
【问题描述】:

这是我尝试将其转换为 JSON 字符串并进行字符串化的非常简单的 C# 类对象:

public class rTestObject
{
    public rTestObject()
    {
        Name = "Hello";
        State = 7;
    }

    public string Name { get; set; }
    public int State { get; set; }
}

我调用下面的静态方法:

    // Json.net
    // from Newtonsoft.Json.dll
    // version 8.0.2.19309
    //

    using Newtonsoft.Json;  
    public static string ConvertToJSON<T>(T obj)
    {
        return JsonConvert.SerializeObject(obj);
    }

产生以下(预期的)输出:

    {"Name":"Hello","State":7}

我调用以下静态方法对我的 JSON 字符串进行字符串化

    public static string Stringify(string json)
    {
        return JsonConvert.ToString(json);
    }

产生以下(我认为这是预期的??)输出:

    "{\"Name\":\"Hello\",\"State\":7}"

我的问题是如何得到的:

    "{\"Name\":\"Hello\",\"State\":7}"

返回 rTestObject?

这是我尝试过的:

试一试

    public static T ConvertFromStringifiedJSON<T>(string stringifiedJSON)
    {
        Newtonsoft.Json.Linq.JObject j = Newtonsoft.Json.Linq.JObject.Parse(stringifiedJSON);
        return ConvertFromJSON<T>(j.ToString());
    }

这是一个例外:

    {"Error reading JObject from JsonReader. Current JsonReader item is not an object: String. Path '', line 1, position 34."}

尝试 2

    public static T ConvertFromJSON<T>(string jsonNotation)
    {
        return JsonConvert.DeserializeObject<T>(jsonNotation, NoNullStrings);
    }

这是一个例外:

    {"Error converting value \"{\"Name\":\"Hello\",\"State\":7}\" to type 'RestApi.Objects.rTestObject'. Path '', line 1, position 34."}

解决方案:

谢谢亚历山大一世!

    public static T ConvertFromStringifiedJSON<T>(string stringifiedJSON)
    {
        var json = JsonConvert.DeserializeObject<string>(stringifiedJSON);
        return ConvertFromJSON<T>(json);
    }

【问题讨论】:

标签: c# json json.net stringify


【解决方案1】:

请查看下一个示例:

class Program
    {
        static void Main(string[] args)
        {
            var test = new TestObject
            {
                Name = "Hello",
                State = 7
            };

            var json = ConvertToJson(test);
            var stringify = Stringify(json);

            var result = StringifyToObject<TestObject>(stringify);
        }

        public static string ConvertToJson<T>(T obj)
        {
            return JsonConvert.SerializeObject(obj);
        }

        public static string Stringify(string json)
        {
            return JsonConvert.ToString(json);
        }

        public static T StringifyToObject<T>(string stringify)
        {
            var json = JsonConvert.DeserializeObject<string>(stringify);
            var result = JsonConvert.DeserializeObject<T>(json);
            return result;
        }
    }

    public class TestObject
    {
        public TestObject()
        {
            Name = "Hi";
            State = 0;
        }

        public string Name { get; set; }
        public int State { get; set; }
    }

StringifyToObject方法。

  1. 将字符串化字符串转换为 JSON 字符串
  2. 将 JSON 字符串反序列化为对象

【讨论】:

  • 太棒了!!
【解决方案2】:

就像@ne1410 所写,使用: JsonConvert.DeserializeObject&lt;rTestObject&gt;(myJsonString);

你不必对你的Json进行字符串化,它已经是一个字符串,从JsonConvert.SerializeObject(obj)的返回类型可以看出

您不需要任何其他 IMO 方法。

【讨论】:

  • 我必须将 JSON 字符串作为字符串传递......(webucator.com/how-to/…)所以它不能是纯 JSON......不幸的是......我正在将数据发送到服务器然后接收它在另一台设备上...... JSON 必须是一个字符串......所以我知道这可以做到......我只需要在 C# 中......而不是 Javascript
  • 好的,C# 中没有“纯 JSON”之类的东西。它是一个对象(反序列化)或一个字符串(序列化)。 JsonConvert.Serialize(object) 给你你的字符串。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-03
  • 2019-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-31
  • 1970-01-01
相关资源
最近更新 更多