c# - 如何将字符串反序列化为对象(格式类似于对象表示法的字符串)

标签 c# string object deserialization

我有一个看起来像这样的字符串。它不是 JSON 也不是 XML。

{Foo={name=My Foo Value, active=true, some date=20170630}, Bar={name=My Bar Value}, Key With Space={name=Foo Bar, active=false}}

这里是假设:

  1. 对象被 {} 括起来
  2. 键名中可以有空格
  3. 键由空格和逗号分隔 ( , )
  4. 值通过等号分配给键
  5. 键可以有多个值,值用 {} 括起来, 值内的值由空格和逗号分隔 ( , )。例如,这是一个具有三个值的键:{My Foo Key={one=true, two=true, third value=false}}

我的策略是反序列化为 Dictionary<string, object首先,担心以后的递归。任何建议(现有图书馆?)表示赞赏!

这是我的

var stringContentTrimmed = stringContent.Substring(1, stringContent.Length - 2);
var objects = stringContentTrimmed.Split(',')
    .Select(x => x.Trim())
    .Where(x => !String.IsNullOrWhiteSpace(x));

TLDRSplit功能也在 split 我的值(value)观,这不是我想要的。

enter image description here

最佳答案

确实,您需要对此有一个适当的规范或语法,但我会大胆猜测并说没有,如果有,实际值将不符合它。

您最好的选择可能是:

  • 消除 = { }, 字符附近的任何空格
  • 将任何 , 替换为 ","
  • 将任何 = 替换为 "="
  • 将任何 { 替换为 {"
  • 将任何 替换为 "
  • 将任何 "{ 替换为 {
  • 将任何 }" 替换为 }
  • 将任何 = 替换为 :

然后将其视为 JSON。

我用你的例子试过了,它成功了。我不知道它是否适用于您的实际值——这将取决于它们是否遵守您所描述的限制。如果键或值嵌入任何 "{}:=, 或者前导或尾随空格很重要,则它将不起作用。

关于c# - 如何将字符串反序列化为对象(格式类似于对象表示法的字符串),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45307762/

相关文章:

c - C 语言编程 计算字符串中的字符

PHP:是否可以从文件内容(字符串)创建 SplFileObject 对象?

c# - Selenium :意外错误。 System.Net.WebException:无法连接到远程服务器

c# - WCF 服务和 QuickBooks Web 连接器之间没有匹配的契约(Contract)

java - 使用snakeYaml解析字符串数组

javascript - 创建 JavaScript 对象的最佳方法

php变量obj转js

c# - 使用 DefaultIfEmpty 加入 LINQ 仍然导致 NullReferenceException

c# - c# 服务中的巨大内存爆裂,可能是什么原因?

C - 将非字母字符读取为字边界