该对象有139个字段;字符串初始值设定项可能包含部分或全部这些字段。它的格式如下:" FirstName":" Bart"," LastName":" Simpson"," Company" :" Fat Tony","地址":" 55 Maple Drive"我可以找到这样的字段:
if (initializerString.contains("FirstName:")
FirstName="get the next series of chars until the ", or end of string
等等。但有更简洁的方法吗?
答案 0 :(得分:1)
看到你的格式与JSON非常相似(实际上缺少大括号),因为人们评论说你通过使用JSON.NET会更好。
如果你完全控制了这个字符串,只需将其转换为json并反序列化它:
JsonConvert.DeserializeObject<YourClass>(yourString);
在反序列化数据时,它会自动设置正确的属性。
如果您无法控制此格式,并且无论如何都需要解析它,只需竖起大括号就可以了:
JsonConvert.DeserializeObject<YourClass>("{" + yourString + "}");
如果您没有针对此类的特定课程,也可以将YourClass
替换为Dictionary<string,object>
您会发现此库为Newtonsoft.Json
,我相信它是处理JSON数据最受欢迎的库。
我做了一个工作示例,以便您可以看到它的实际效果(请注意,我保留了您的字符串格式,但请尝试使用直接json):
using System;
using System.Linq;
using System.Collections.Generic;
using Newtonsoft.Json;
public class Program
{
public class Information
{
public string FirstName{get;set;}
public string LastName{get;set;}
public string Company{get;set;}
public string Address{get;set;}
}
public static void Main()
{
string myObject = "\"FirstName\":\"Bart\",\"LastName\":\"Simpson\",\"Company\":\"Fat Tony's\",\"Address\":\"55 Maple Drive\"";
var converted = JsonConvert.DeserializeObject<Dictionary<string, object>>("{"+myObject+"}");
var converted2 = JsonConvert.DeserializeObject<Information>("{"+myObject+"}");
Console.WriteLine(String.Join("\n", converted.Select(c=> c.Key + ": " + c.Value)));
Console.WriteLine(converted2.FirstName);
}
}
这是一个额外的小提琴:
答案 1 :(得分:0)
使用正则表达式,你可以这样做:
string firstName = Regex.Match(yourstring,@"(?<=""FirstName"":"").*?(?="")").Value;
然而,这看起来像一个json字符串,并且有更简单的方法来获取数据。
答案 2 :(得分:0)
您可以创建一个Dictionary<string,object> dict
,其中包含属性和属性的名称。
然后您可以拆分字符串
//Remove the "
initializerString = initializerString.Replace('"', '');
//Split by ,
var tmp = initializerString.Split(",");
//Foreach pair key/value split by :
foreach( var x in tmp){
var tmp2=x.Split(":");
//Assign the value to the property in the Dictionary
dict[tmp2[0]]=tmp2[1];
}
警告。由于我实际上并不知道您使用此代码的内容,因此这比使用代码更为一般。