简体   繁体   English

iOS for Windows Phone 8中的plist文件

[英]File like plist in iOS for Windows Phone 8

I am wondering is ther similar solution for saving all kind of data to file like it's done in iOS with plist files? 我想知道是否有类似的解决方案用于将所有类型的数据保存到文件中,就像在iOS中使用plist文件一样?

Loading data to NSArray 将数据加载到NSArray

[NSMutableArray arrayWithArray:[[NSArray alloc] initWithContentsOfFile:pathToFile]]

Write data to file 将数据写入文件

[NSArray writeToFile:destPath atomically:YES];

I know there is something similar to [NSUserDefaults standardUserDefaults] and it is IsolatedStorageSettings.ApplicationSettings 我知道有类似于[NSUserDefaults standardUserDefaults]东西,它是IsolatedStorageSettings.ApplicationSettings

Any help will appreciated. 任何帮助将不胜感激。


SOLVED 解决了

In this question I have exampled use of 1 Soonts method. 在这个问题中,我使用了1个Soonts方法。

There're many solutions. 有很多解决方案。

  1. [built-in] Data contract serializer, to either text/xml or MS Binary XML (the latter being much more effective) [内置]数据契约序列化程序,对text / xml或MS二进制XML(后者更有效)
  2. [built-in] XML serializer. [内置] XML序列化程序。
  3. [built-in] BinaryWriter/BinaryReader. [内置] BinaryWriter / BinaryReader。
  4. [either built-in or 3-rd party] JSON serializer. [内置或第三方] JSON序列化程序。
  5. [3-rd party] Google protocol buffers. [第3方] Google协议缓冲区。

For different requirements, I prefer 1 and 5. 对于不同的要求,我更喜欢1和5。

Update: here's the sample code implementing #1. 更新:这是实现#1的示例代码。 The code is tested, but there's still some room for improvements. 代码经过测试,但仍有一些改进空间。

using System;
using System.Collections.Generic;
using System.IO;
using System.Runtime.Serialization;
using System.Xml;

namespace NS
{
    /// <summary>This static class handles data serialization for the app.</summary>
    /// <remarks>
    /// <para>The serialization format is Microsoft's .NET binary XML, documented in [MC-NBFX] specification.</para>
    /// <para>The efficiency could be improved further, by providing a pre-built XML dictionary.</para>
    /// </remarks>
    internal static class Serializer
    {
        /// <summary>Serializers are cached here</summary>
        static readonly Dictionary<Type, DataContractSerializer> s_serializers = new Dictionary<Type, DataContractSerializer>();

        /// <summary>Either get the serializer from cache, or create a new one for the type</summary>
        /// <param name="tp"></param>
        /// <returns></returns>
        private static DataContractSerializer getSerializer( Type tp )
        {
            DataContractSerializer res = null;
            if( s_serializers.TryGetValue( tp, out res ) )
                return res;

            lock( s_serializers )
            {
                if( s_serializers.TryGetValue( tp, out res ) )
                    return res;
                res = new DataContractSerializer( tp );
                s_serializers.Add( tp, res );
                return res;
            }
        }

        /// <summary>Read deserialized object from the stream.</summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="stm"></param>
        /// <returns></returns>
        public static T readObject<T>( Stream stm ) where T: class
        {
            DataContractSerializer ser = getSerializer( typeof( T ) );
            using( var br = XmlDictionaryReader.CreateBinaryReader( stm, XmlDictionaryReaderQuotas.Max ) )
                return (T)ser.ReadObject( br );
        }

        /// <summary>Write serialized object to the stream.</summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="stm"></param>
        /// <param name="obj"></param>
        public static void writeObject<T>( Stream stm, T obj ) where T: class
        {
            DataContractSerializer ser = getSerializer( typeof( T ) );
            using( XmlDictionaryWriter bw = XmlDictionaryWriter.CreateBinaryWriter( stm, null, null, false ) )
            {
                ser.WriteObject( bw, obj );
                bw.Flush();
            }
            stm.Flush();
        }
    }
}

I've written an article about various ways of saving data in Windows Phone applications that might be helpful. 我写了一篇关于在Windows Phone应用程序中保存数据的各种方法文章可能会有所帮助。 I've used JSON with an Isolated Storage File in a number of my apps, and there's some sample code there. 我在许多应用程序中都使用了JSON和隔离存储文件,那里有一些示例代码。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM