将普通字符串转换为对象

时间:2019-09-09 12:49:29

标签: c# .net

是否可以将普通字符串转换为:

"Data: {
    id: '288dsbshbdas8dsdsb',
    data: '2pm'
}"

收件人:

Data: {
    id: '288dsbshbdas8dsdsb',
    data: '2pm'
}

已经尝试过:

 string input = "Data: {id: '288dsbshbdas8dsdsb', data: '2pm'};
 var output = Convert.ChangeType(input, TypeCode.Object);

但这仍然返回字符串吗?

1 个答案:

答案 0 :(得分:3)

使用NewtonSoft JsonTextWriterJsonTextReader,您可以轻松地编写和读取这种字符串。

要编写,必须使用JsonTextWriter属性:

writer.QuoteName = false;
writer.QuoteChar = '\'';

需要阅读自定义配置。

using System;
using System.IO;
using Newtonsoft.Json;

public class Program
{
    public static void Main()
    {
        var objSource= new RootObject{
            Data= new Data{
                id="123456",
                data="FooBar"
            }
        };      

        var serializer = new JsonSerializer();
        var stringWriter = new StringWriter();
        var writer = new JsonTextWriter(stringWriter);
        writer.QuoteName = false;
        writer.QuoteChar = '\'';
        serializer.Serialize(writer, objSource);        

        var input= stringWriter.ToString();
        Console.WriteLine(input);

        JsonTextReader reader = new JsonTextReader(new StringReader(input));
        var result = serializer.Deserialize<RootObject>(reader);

        result.Dump();
    }

    public class Data
    {
        public string id { get; set; }
        public string data { get; set; }
    }

    public class RootObject
    {
        public Data Data { get; set; }
    }
}

live demo


免责声明:正如Jodrell所注意到的,它返回一个“ RootObject”。

作者将返回{Data:{id:'123456',data:'FooBar'}}
而不是Data:{id:'123456',data:'FooBar'}注意到字符串周围多余的{}
从另一个获得的字符串操作就足够了。