public void UseStandardSession2() { MemoryStream ms = new MemoryStream(); XmlBinaryWriterSession session = new XmlBinaryWriterSession(); XmlDictionary dic = new XmlDictionary(); XmlDictionaryString x = dic.Add("urn:foo"); XmlDictionaryWriter w = XmlDictionaryWriter.CreateBinaryWriter(ms, dic, session); w.WriteStartElement(dic.Add("FOO"), x); w.WriteStartElement(dic.Add("blah"), x); w.WriteStartElement(dic.Add("blabla"), x); w.Close(); Assert.AreEqual(new byte [] { 0x42, 2, 0x0A, 0, 0x42, 4, 0x42, 6, 1, 1, 1 }, ms.ToArray(), "#1"); XmlDictionaryString ds; Assert.IsTrue(dic.TryLookup(0, out ds), "#2-1"); Assert.AreEqual("urn:foo", ds.Value, "#2-2"); Assert.AreEqual(0, ds.Key, "#2-3"); Assert.IsTrue(dic.TryLookup(1, out ds), "#3-1"); Assert.AreEqual("FOO", ds.Value, "#3-2"); Assert.AreEqual(1, ds.Key, "#3-3"); Assert.IsTrue(dic.TryLookup(2, out ds), "#4-1"); Assert.AreEqual("blah", ds.Value, "#4-2"); Assert.AreEqual(2, ds.Key, "#4-3"); Assert.IsTrue(dic.TryLookup(3, out ds), "#5-1"); Assert.AreEqual("blabla", ds.Value, "#5-2"); Assert.AreEqual(3, ds.Key, "#5-3"); }
public void Beyond128DictionaryEntries () { XmlDictionaryString ds; MemoryStream ms = new MemoryStream (); XmlDictionary dic = new XmlDictionary (); for (int i = 0; i < 260; i++) Assert.AreEqual (i, dic.Add ("n" + i).Key, "d"); XmlDictionary dic2 = new XmlDictionary (); XmlBinaryWriterSession session = new XmlBinaryWriterSession (); int idx; for (int i = 0; i < 260; i++) session.TryAdd (dic2.Add ("n" + i), out idx); XmlDictionaryWriter w = XmlDictionaryWriter.CreateBinaryWriter (ms, dic, session); w.WriteStartElement (dic.Add ("n128"), dic.Add ("n129")); w.WriteStartElement (dic2.Add ("n130"), dic2.Add ("n131")); w.WriteStartElement (dic.Add ("n132"), dic2.Add ("n133")); w.WriteStartElement (dic.Add ("n256"), dic2.Add ("n256")); w.Close (); byte [] bytes = new byte [] { // so, when it went beyond 128, the index // becomes 2 bytes, where // - the first byte always becomes > 80, and // - the second byte becomes (n / 0x80) * 2. 0x42, 0x80, 2, 0x0A, 0x82, 2, 0x42, 0x85, 2, 0x0A, 0x87, 2, 0x42, 0x88, 2, 0x0A, 0x8B, 2, 0x42, 0x80, 4, 0x0A, 0x81, 4, 1, 1, 1, 1 }; Assert.AreEqual (bytes, ms.ToArray (), "result"); }
public void TryAddDuplicate() { XmlDictionary dic = new XmlDictionary(); XmlDictionaryString d1 = dic.Add("foo"); XmlBinaryWriterSession s = new XmlBinaryWriterSession(); int idx; s.TryAdd(d1, out idx); s.TryAdd(d1, out idx); }
public void WriteDictionaryStringWithDifferentDictionary () // it actually works { MemoryStream ms = new MemoryStream (); XmlBinaryWriterSession session = new XmlBinaryWriterSession (); XmlDictionaryWriter w = XmlDictionaryWriter.CreateBinaryWriter (ms, new XmlDictionary (), session); XmlDictionary dic = new XmlDictionary (); w.WriteStartElement (dic.Add ("FOO"), XmlDictionaryString.Empty); w.Close (); Assert.AreEqual (new byte [] {0x42, 1, 1}, ms.ToArray ()); }
public void UseStandardSession () { MemoryStream ms = new MemoryStream (); XmlBinaryWriterSession session = new XmlBinaryWriterSession (); XmlDictionary dic = new XmlDictionary (); XmlDictionaryWriter w = XmlDictionaryWriter.CreateBinaryWriter (ms, dic, session); w.WriteStartElement (dic.Add ("FOO"), XmlDictionaryString.Empty); w.WriteStartElement (dic.Add ("blah"), XmlDictionaryString.Empty); w.WriteStartElement (dic.Add ("blabla"), XmlDictionaryString.Empty); w.Close (); Assert.AreEqual (new byte [] {0x42, 0, 0x42, 2, 0x42, 4, 1, 1, 1}, ms.ToArray ()); }
public void TryAddIndex() { XmlDictionary dic = new XmlDictionary(); XmlDictionaryString d1 = dic.Add("foo"); XmlDictionaryString d2 = dic.Add("bar"); XmlDictionaryString d3 = dic.Add("baz"); XmlBinaryWriterSession s = new XmlBinaryWriterSession(); int idx; s.TryAdd(d1, out idx); Assert.AreEqual(0, idx, "#1"); s.TryAdd(d3, out idx); Assert.AreEqual(1, idx, "#2"); // not 2 }
private static void Test2() { Employee employee = new Employee { Id = "123", Deptment = "生产", Name = "lhl", Sex = "M" }; var session = new XmlBinaryWriterSession(); XmlDictionary dictionary = new XmlDictionary(); dictionary.Add("Employee"); dictionary.Add("Id"); dictionary.Add("Name"); dictionary.Add("Gender"); WriteObject <Employee>(employee, (stream) => XmlDictionaryWriter.CreateBinaryWriter(stream, dictionary, session, false)); }
static void Main(string[] args) { Employee employee = new Employee { Id = "001", Name = "张三", Gender = "男", Department = "销售部" }; var session = new XmlBinaryWriterSession(); XmlDictionary dictionary = new XmlDictionary(); dictionary.Add("Employee"); dictionary.Add("Id"); dictionary.Add("Name"); dictionary.Add("Gender"); dictionary.Add("Department"); WriteObject <Employee>(employee, stream => XmlDictionaryWriter.CreateBinaryWriter(stream, dictionary, session, false)); }
public void IndicesFromDictionaryAndSession() { // So, I found out the solution for the indices puzzle. MemoryStream ms = new MemoryStream(); XmlBinaryWriterSession session = new XmlBinaryWriterSession(); XmlDictionary dic = new XmlDictionary(); XmlDictionaryWriter w = XmlDictionaryWriter.CreateBinaryWriter(ms, dic, session); XmlDictionary dic2 = new XmlDictionary(); XmlDictionary dic3 = new XmlDictionary(); w.WriteStartElement(dic.Add("FOO"), XmlDictionaryString.Empty); w.WriteStartElement(dic2.Add("FOO"), XmlDictionaryString.Empty); w.WriteStartElement(dic3.Add("FOO"), XmlDictionaryString.Empty); w.WriteStartElement(dic2.Add("BAR"), XmlDictionaryString.Empty); w.WriteStartElement(dic.Add("BAR"), XmlDictionaryString.Empty); w.Close(); // ... so, looks like even indices are for dictionary, // and odd indices are for session. byte [] bytes = new byte [] { 0x42, 0, 0x42, 1, 0x42, 1, 0x42, 3, 0x42, 2, 1, 1, 1, 1, 1 }; Assert.AreEqual(bytes, ms.ToArray()); }
public BinaryBufferedMessageWriter(IXmlDictionary dictionary, XmlBinaryWriterSession session) { this.dictionary = dictionary; this.session = session; }
public static XmlDictionaryWriter CreateBinaryWriter(Stream stream, IXmlDictionary dictionary, XmlBinaryWriterSession session, bool ownsStream);