2008-11-19 13 views
26

मेरे पास तारों की एक साधारण 2 डी सरणी है और मैं इसे MOSS में एक SPFieldMultiLineText में भरना चाहता हूं। यह एक ntext डेटाबेस फ़ील्ड के लिए नक्शे।फ़ाइल सिस्टम का उपयोग किए बिना सी # में सीरियलाइजेशन

मुझे पता है कि मैं एक्सएमएल को क्रमबद्ध कर सकता हूं और फ़ाइल सिस्टम में स्टोर कर सकता हूं, लेकिन मैं फाइल सिस्टम को छूए बिना क्रमबद्ध करना चाहता हूं।

public override void ItemAdding(SPItemEventProperties properties) 
{ 
    // build the array 
    List<List<string>> matrix = new List<List<string>>(); 
    /* 
    * populating the array is snipped, works fine 
    */ 
    // now stick this matrix into the field in my list item 
    properties.AfterProperties["myNoteField"] = matrix; // throws an error 
} 

ऐसा लगता है कि मैं इस तरह कुछ करने के लिए सक्षम होना चाहिए:

XmlSerializer s = new XmlSerializer(typeof(List<List<string>>)); 
properties.AfterProperties["myNoteField"] = s.Serialize.ToString(); 

लेकिन वह काम नहीं करता। मैंने पाया है कि सभी उदाहरण एक पाठ फ़ाइल को लिखने का प्रदर्शन करते हैं।

उत्तर

40
StringWriter outStream = new StringWriter(); 
XmlSerializer s = new XmlSerializer(typeof(List<List<string>>)); 
s.Serialize(outStream, myObj); 
properties.AfterProperties["myNoteField"] = outStream.ToString(); 
2
VB.NET

Public Shared Function SerializeToByteArray(ByVal object2Serialize As Object) As Byte() 
    Using stream As New MemoryStream 
     Dim xmlSerializer As New XmlSerializer(object2Serialize.GetType()) 
     xmlSerializer.Serialize(stream, object2Serialize) 
     Return stream.ToArray() 
    End Using 
End Function 

Public Shared Function SerializeToString(ByVal object2Serialize As Object) As String 
    Dim bytes As Bytes() = SerializeToByteArray(object2Serialize) 
    Return Text.UTF8Encoding.GetString(bytes) 
End Function 

में सी # में

public byte[] SerializeToByteArray(object object2Serialize) { 
     using(MemoryStream stream = new MemoryStream()) { 
      XmlSerializer xmlSerializer = new XmlSerializer(object2Serialize.GetType()); 
      xmlSerializer.Serialize(stream, object2Serialize); 
      return stream.ToArray(); 
     } 
} 

public string SerializeToString(object object2Serialize) { 
    byte[] bytes = SerializeToByteArray(object2Serialize); 
    return Text.UTF8Encoding.GetString(bytes); 
} 
+0

एक बाइट सरणी के माध्यम से जा रहे हैं? आउच। – bzlm

+0

यद्यपि संभावनाओं में से एक। ऐसा करने के कई तरीके हैं! यदि आपके पास बेहतर प्रकाशित है तो इसे प्रकाशित करें! और अगर यह इसके लायक है तो मैं ऊपर हट जाऊंगा। – JSC

5

उपयोग TextWriter और StringWriter साथ TextReader कक्षाएं।

बुद्धि के लिए

:

XmlSerializer s = new XmlSerializer(typeof(whatever)); 
TextWriter w = new StringWriter(); 
s.Serialize(w, whatever); 
yourstring = w.ToString(); 
12

यहाँ एक जेनेरिक serializer है (सी #):

public string SerializeObject<T>(T objectToSerialize) 
    { 
     BinaryFormatter bf = new BinaryFormatter(); 
     MemoryStream memStr = new MemoryStream(); 

     try 
     { 
      bf.Serialize(memStr, objectToSerialize); 
      memStr.Position = 0; 

      return Convert.ToBase64String(memStr.ToArray()); 
     } 
     finally 
     { 
      memStr.Close(); 
     } 
    } 

आपके मामले में आप के साथ कह सकते हैं:

SerializeObject<List<string>>(matrix); 
संबंधित मुद्दे