사전은 Dictionary<string, object>
이고 사전은 문자열 키와 개체를 값으로 보유합니다. 저장하고 나중에 해당 사전을로드해야합니다. 이를 수행하는 가장 좋은 방법은 무엇입니까?파일을 저장할 개체가있는 사전 작성
답변
당신이 직렬화 Dictionary<TKey, TVal>
(테스트)를 사용할 수 있습니다 :
using (FileStream fileStream = new FileStream("test.binary", FileMode.Create))
{
IFormatter bf = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
bf.Serialize(fileStream, dict);
}
: 파일에
http://www.dacris.com/blog/2010/07/31/c-serializable-dictionary-a-working-example/
Dictionary<String, Object> otherDictionary = new Dictionary<String, Object>();
otherDictionary.Add("Foo", new List<String>() { "1st Foo","2nd Foo","3rd Foo" });
var dict = new SerializableDictionary<String, Object>(otherDictionary);
쓰기를
파일에서 읽어 :
using (FileStream fileStream = new FileStream("test.binary", FileMode.Open))
{
IFormatter bf = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
dict = (SerializableDictionary<String, Object>)bf.Deserialize(fileStream);
}
참고 : 두 번째 Dictionary
를 만들 필요가 없습니다 물론. 처음에는 SerializableDictionary
을 사용할 수 있습니다. 그것은 단지 이미 존재하는 사전과 함께 사용하는 방법을 보여 주어야합니다.
NewtonSoft Json.net : http://james.newtonking.com/projects/json-net.aspx을 사용할 수 있습니다. 유연하고 매우 친절합니다.
XML로 직렬화하는 것은 어떻습니까?
http://support.microsoft.com/kb/815813
object yourType = new Object();
System.Xml.Serialization.XmlSerializer x = new System.Xml.Serialization.XmlSerializer(yourType.GetType());
x.Serialize(Console.Out,yourType);
작동 이음매가 없습니다. 런타임에 –
중에 NotSupportedException을 던져서 유형의 항목이 serialize되지 않음을 의미합니다. 모든 하위 클래스도 직렬화가 가능해야합니다. – WraithNath
추가 종속성을 추가 할 필요가 없다면 protobuf.net을 사용할 수 있습니다. 이것은 XML serializer 접근법보다 빠르다는 장점이 있으며, 늪지 표준 사전 (Bog Standard Dictionary)에서 작동합니다.
class Program
{
static void Main(string[] args)
{
Dictionary<int, string> dict = new Dictionary<int, string>();
for (int i = 0; i < 10; i++)
{
dict[i] = i.ToString();
}
using (var ms = new MemoryStream())
{
ProtoBuf.Serializer.Serialize(ms, dict);
ms.Seek(0, SeekOrigin.Begin);
var dict2 = ProtoBuf.Serializer.Deserialize<Dictionary<int, string>>(ms);
}
}
}
너무 오래 사전의 키와 값 유형 모두 protobuf.net에 의해 직렬화으로,이 뜻 : 어셈블리에
참조는, 다음 쇼는 어떻게 MemoryStream
와 함께 사용하기 작업.
편집 :
이 방법을 사용하려면, 당신은 ProtoBuf하여 키와 값 객체의 클래스가 직렬화해야한다. 간단히 말해서 [ProtoContract]
을 클래스에 첨부하고 예를 들어 serialize하려는 각 속성에 [ProtoMember(1)]
을 추가하십시오. 자세한 내용은 웹 사이트를 참조하십시오. string
및 int
은 모두 상자에서 직렬화 할 수 있습니다.
- 1. 사전 함수 작성
- 2. 문자열에서 목록의 사전 작성
- 3. 사전 파이썬 목록 작성
- 4. 코어 데이터의 사전 작성 버전입니까?
- 5. C#에서 Excel에 사전 작성
- 6. 큰 텍스트의 단어 사전 작성
- 7. Python에서 csv에 TypeError 작성 사전
- 8. 개체가있는 사전을 확인하십시오.
- 9. 파일을 저장할 Android
- 10. Java에서 GIT 사전 커밋 훅을 작성 하시겠습니까?
- 11. 오브젝트가 아닌 다른 값으로 사전 작성
- 12. 들소에서 ++와 충돌, 게시/사전 작성 방법?
- 13. Apple 지침에 따라 파일을 저장할 디렉토리를 선택하십시오.
- 14. JQuery와 개체가있는 방법 'XYZ'
- 15. 관련 개체가있는 Django 개체
- 16. 사용자 지정 개체가있는 NSPredicates
- 17. 개체가있는 자바 스크립트 배열입니까?
- 18. 개체가있는 메서드 재정의
- 19. 하나의 개체가있는 UIPickerView
- 20. android에 파일을 작성 하시겠습니까?
- 21. 배치 파일을 C로 작성 #
- 22. 사용자 파일을 저장할 위치는 어디입니까?
- 23. C# - txt 파일을 저장할 위치
- 24. 레일스에 XML 파일을 저장할 위치
- 25. iPhone에 파일을 저장할 수 있습니까?
- 26. Xcode에서 파일을 저장할 수 없습니다
- 27. 파일을 저장할 사람이 묻는 메시지
- 28. 캐시에 저장된 파일을 저장할 디렉토리?
- 29. FileInputStream에서 사용되는 파일을 저장할 위치
- 30. 큰 개체가있는 mclapply - "직렬화가 너무 커서 원본 벡터에 저장할 수 없습니다."
http://www.dacris.com/blog/2010/07/31/c-serializable-dictionary-a-working-example/ –
해당 클래스 사용 방법을 이해할 수 없습니다. 새 SerializableDictionary() 객체를 만들고 저장 /로드하는 방법은 무엇입니까? –
Tomas