我有一个看起来像这样的字符串。它不是 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}}
这里是假设:
- 对象被
{}
括起来 - 键名中可以有空格
- 键由空格和逗号分隔 (
,
) - 值通过等号分配给键
- 键可以有多个值,值用
{}
括起来, 值内的值由空格和逗号分隔 (,
)。例如,这是一个具有三个值的键:{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));
TLDR。 Split
功能也在 split 我的值(value)观,这不是我想要的。
最佳答案
确实,您需要对此有一个适当的规范或语法,但我会大胆猜测并说没有,如果有,实际值将不符合它。
您最好的选择可能是:
- 消除
=
{
}
或,
字符附近的任何空格 - 将任何
,
替换为","
- 将任何
=
替换为"="
- 将任何
{
替换为{"
- 将任何
替换为
"
- 将任何
"{
替换为{
- 将任何
}"
替换为}
- 将任何
=
替换为:
然后将其视为 JSON。
我用你的例子试过了,它成功了。我不知道它是否适用于您的实际值——这将取决于它们是否遵守您所描述的限制。如果键或值嵌入任何 "{}:=,
或者前导或尾随空格很重要,则它将不起作用。
关于c# - 如何将字符串反序列化为对象(格式类似于对象表示法的字符串),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45307762/