List<User> users = <..list of users from db...>
이름, 성, 생년월일 (DateOfBirth) // 다차원 배열 뭔가를 데이터베이스에서 사용자 목록을 검색?
는 지금은 문자열로이 목록을 저장할 그리고 그것이 즉
string strUsers = users.ToArray().ToString();
방법 strUsers에서 사용자 목록을 다시 재사용 할 수있을까요?
가능합니까?
List<User> users = <..list of users from db...>
이름, 성, 생년월일 (DateOfBirth) // 다차원 배열 뭔가를 데이터베이스에서 사용자 목록을 검색?
는 지금은 문자열로이 목록을 저장할 그리고 그것이 즉
string strUsers = users.ToArray().ToString();
방법 strUsers에서 사용자 목록을 다시 재사용 할 수있을까요?
가능합니까?
, 사용자 정의 변환기 클래스를 작성하는 것이 좋습니다 것입니다.
public static class UsersConverter
{
// Separates user properties.
private const char UserDataSeparator = ',';
// Separates users in the list.
private const char UsersSeparator = ';';
public static string ConvertListToString(IEnumerable<User> usersList)
{
var stringBuilder = new StringBuilder();
// Build the users string.
foreach (User user in usersList)
{
stringBuilder.Append(user.Name);
stringBuilder.Append(UserDataSeparator);
stringBuilder.Append(user.Age);
stringBuilder.Append(UsersSeparator);
}
// Remove trailing separator.
stringBuilder.Remove(stringBuilder.Length - 1, 1);
return stringBuilder.ToString();
}
public static List<User> ParseStringToList(string usersString)
{
// Check that passed argument is not null.
if (usersString == null) throw new ArgumentNullException("usersString");
var result = new List<User>();
string[] userDatas = usersString.Split(UsersSeparator);
foreach (string[] userData in userDatas.Select(x => x.Split(UserDataSeparator)))
{
// Check that user data contains enough arguments.
if (userData.Length < 2) throw new ArgumentException("Users string contains invalid data.");
string name = userData[0];
int age;
// Try parsing age.
if (!int.TryParse(userData[1], out age))
{
throw new ArgumentException("Users string contains invalid data.");
}
// Add to result list.
result.Add(new User { Name = name, Age = age });
}
return result;
}
}
StringBuilder를 사용하면 성능이 현저하게 향상됩니다. 당신은 또한 다른 분리 자/추가 로직 등을 고려하여 변환기를 쉽게 확장 할 수 있습니다.
보다 일반적인 솔루션이 필요한 경우 (어떤 클래스에도 사용할 수 있음) 리플렉션을 사용하여 반복하는 변환기를 만들 수 있습니다 모든 공개 필드, 속성을 가져 오거나 설정하여 문자열로 추출 할 수있는 것을 확인한 다음 나중에 문자열을 목록으로 다시 변환하는 프로세스를 되돌립니다.
string.Join 방법을 사용하십시오.
var joined = string.Join(",", users.Select(u => u.Name));
이렇게하면 ','로 구분 된 사용자 이름의 단일 문자열을 얻을 수 있습니다. 당신은 string.Split를 사용하여 프로세스를 취소 할 수 있습니다
var joined = string.Join(",",
users.Select(u => u.FirstName + " " + u.LastName));
, 예를 들면 :
또는 여러 열에 대한
var split = joined.Split(new [] {','});
사용이 많은 사용자와 열이 많은 경우이 코드
string combindedString = string.Join(",", myList);
var Array = combindedString.Split(new [] {','});
배열에서 목록으로 이동하는 방법
내가 원하는 것은 모든 사용자를 문자열로 덤프하고 문자열에서 사용자를 되 찾을 수 있다고 생각하는 것입니다.
나는이 같은 제안 : Users (사용자)에 대한 XElement를 반환하는 메서드를 추가 을 입력 :
public XElement GetXElement()
{
return new XElement("User", new XElement("Name", this.FirstName)) //and so on...
}
및 사용자에 문자열을 디코딩 한 후 하나
static User GetUserFromXElement(string xml)
{
XElement temp = XElement.Parse(xml);
User temp = new User();
foreach (XElement inner in temp.Elements())
{
switch inner.Name
{
case "Name":
temp.Name = inner.Value
break;
//whatever
}
}
}
그리고 이것을하십시오 :
public string UsersToElements (List<Users> toWrite)
{
Stringbuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
XElement root = new XElement("root");
XDocument temp = new XDocument(root);
foreach (User user in toWrite)
{
root.Append(user.GetXElement());
}
temp.Save(sw);
return sw.ToString();
}
및 이것을
public List<Users> ElementsToUsers (string xml)
{
List<Users> usrsList = new List<Users>();
XDocument temp = XDocument.Load(xml);
foreach (XElement e in XDocument.Root.Elements())
{
usrsList.Append(Users.GetUserFromXElement(e));
}
return usrsList;
}
JSON 솔루션 (JSON 사용.THS가 작동하는 경우 NET)
public JObject GetJObject()
{
return new JObject("user", new JProperty("name", this.FirstName)); //so on
}
static User GetUserFromJObject(string json)
{
JObject obj = JObject.Parse(json);
return new User() { FirstName = (string)obj["user"]["name"] }; //so on
}
public string UsersToElements (List<Users> users)
{
JObject root = new JObject(from usr in users select new JAttribute("user", usr.GetJObject());
return root.ToString();
}
public List<users> ElementsToUsers(string json)
{
List<Users> users = new List<Users>();
JObject temp = JObject.Parse(json);
foreach (JObject o in (JEnumerable<JObject>)temp.Children())
{
users.Add(Users.GetUserFromJObject(o.ToString());
}
return users;
}
나는 아무 생각이 :/(물론 내가 아는 XML 당신이 다시 작성해야 할 이유를 사용자의 목록이있는 경우는
)을 JSON에 대해 너무 확실하지 않습니다 새 목록? –
참조 DB에서이 임시 결과 집합을 문자열로 저장하려면 @DarrenDavies http://stackoverflow.com/questions/1666258/linq-to-generic-list?rq=1 –
을 참조하십시오. – mko