x) Recording deserialization
This commit is contained in:
parent
0c37db10b5
commit
ff28a94131
30
imm/Imm.cs
30
imm/Imm.cs
@ -67,8 +67,16 @@ public interface Meta
|
|||||||
public interface Imm
|
public interface Imm
|
||||||
{
|
{
|
||||||
public Meta Meta { get; }
|
public Meta Meta { get; }
|
||||||
|
public object Record( string reason = "",
|
||||||
|
[CallerMemberName] string dbgName = "",
|
||||||
|
[CallerFilePath] string dbgPath = "",
|
||||||
|
[CallerLineNumber] int dbgLine = 0
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//[lib.Ser( Types = lib.Types.None )]
|
//[lib.Ser( Types = lib.Types.None )]
|
||||||
public record class Versioned<T> : Imm
|
public record class Versioned<T> : Imm
|
||||||
where T : Versioned<T>
|
where T : Versioned<T>
|
||||||
@ -93,6 +101,18 @@ public record class Versioned<T> : Imm
|
|||||||
MetaStorage = meta;
|
MetaStorage = meta;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virtual public T Record(
|
||||||
|
string reason = "",
|
||||||
|
[CallerMemberName] string dbgName = "",
|
||||||
|
[CallerFilePath] string dbgPath = "",
|
||||||
|
[CallerLineNumber] int dbgLine = 0
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return Process( t => t, reason );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
protected MetaData MetaStorage = new();
|
protected MetaData MetaStorage = new();
|
||||||
|
|
||||||
[DebuggerBrowsable(DebuggerBrowsableState.Never)]
|
[DebuggerBrowsable(DebuggerBrowsableState.Never)]
|
||||||
@ -139,10 +159,14 @@ public record class Versioned<T> : Imm
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
object Imm.Record( string reason, string dbgName, string dbgPath, int dbgLine ) => Record( reason, dbgName, dbgPath, dbgLine );
|
||||||
|
|
||||||
|
//public object Record( string reason = "", [CallerMemberName] string dbgName = "", [CallerFilePath] string dbgPath = "", [CallerLineNumber] int dbgLine = 0 ) => Recorded( );
|
||||||
}
|
}
|
||||||
|
|
||||||
//[lib.Ser( Types = lib.Types.None )]
|
//[lib.Ser( Types = lib.Types.None )]
|
||||||
public record class Recorded<T> : Versioned<T>
|
public record class Recorded<T> : Versioned<T>, imm.Imm
|
||||||
where T : Recorded<T>
|
where T : Recorded<T>
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -171,7 +195,7 @@ public record class Recorded<T> : Versioned<T>
|
|||||||
new public MetaData Meta => MetaStorage as MetaData;
|
new public MetaData Meta => MetaStorage as MetaData;
|
||||||
|
|
||||||
|
|
||||||
virtual public T Record(
|
override public T Record(
|
||||||
string reason = "",
|
string reason = "",
|
||||||
[CallerMemberName] string dbgName = "",
|
[CallerMemberName] string dbgName = "",
|
||||||
[CallerFilePath] string dbgPath = "",
|
[CallerFilePath] string dbgPath = "",
|
||||||
@ -230,7 +254,7 @@ public record class Recorded<T> : Versioned<T>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public record class Timed<T> : Recorded<T>
|
public record class Timed<T> : Recorded<T>, imm.Imm
|
||||||
where T : Timed<T>
|
where T : Timed<T>
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|||||||
@ -12,6 +12,7 @@ using System.Diagnostics;
|
|||||||
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Collections.Immutable;
|
using System.Collections.Immutable;
|
||||||
|
using System.Net.Sockets;
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -177,9 +178,18 @@ namespace lib
|
|||||||
#region Deserialize
|
#region Deserialize
|
||||||
private static FormatterConverter s_conv = new();
|
private static FormatterConverter s_conv = new();
|
||||||
|
|
||||||
|
private string fromStr = "";
|
||||||
|
|
||||||
|
void SetFromStr( Stream stream )
|
||||||
|
{
|
||||||
|
fromStr = stream.ToString();
|
||||||
|
fromStr = string.IsNullOrWhiteSpace(fromStr) ? (stream as FileStream).Name : fromStr;
|
||||||
|
fromStr = string.IsNullOrWhiteSpace(fromStr) ? (stream as NetworkStream).Socket.RemoteEndPoint.ToString() : fromStr;
|
||||||
|
}
|
||||||
|
|
||||||
public object Deserialize( Stream stream )
|
public object Deserialize( Stream stream )
|
||||||
{
|
{
|
||||||
|
SetFromStr( stream );
|
||||||
return DeserializeKnownType( stream, null );
|
return DeserializeKnownType( stream, null );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -188,6 +198,8 @@ namespace lib
|
|||||||
|
|
||||||
public object DeserializeKnownType( Stream stream, Type t )
|
public object DeserializeKnownType( Stream stream, Type t )
|
||||||
{
|
{
|
||||||
|
SetFromStr( stream );
|
||||||
|
|
||||||
XmlTextReader reader = new( stream );
|
XmlTextReader reader = new( stream );
|
||||||
|
|
||||||
object obj = Deserialize( reader, t );
|
object obj = Deserialize( reader, t );
|
||||||
@ -214,6 +226,8 @@ namespace lib
|
|||||||
|
|
||||||
public void DeserializeInto<T>( Stream stream, T obj )
|
public void DeserializeInto<T>( Stream stream, T obj )
|
||||||
{
|
{
|
||||||
|
SetFromStr( stream );
|
||||||
|
|
||||||
XmlTextReader reader = new( stream );
|
XmlTextReader reader = new( stream );
|
||||||
reader.Read();
|
reader.Read();
|
||||||
|
|
||||||
@ -497,8 +511,10 @@ namespace lib
|
|||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void HydrateObjectOfNarrowType( XmlElement elem, MemberInfo mi, Type narrowType, object obj )
|
private object HydrateObjectOfNarrowType( XmlElement elem, MemberInfo mi, Type narrowType, object obj )
|
||||||
{
|
{
|
||||||
|
var isImm = typeof(imm.Imm).IsAssignableFrom( narrowType );
|
||||||
|
|
||||||
XmlNodeList allChildren = elem.ChildNodes;
|
XmlNodeList allChildren = elem.ChildNodes;
|
||||||
|
|
||||||
bool filterFields, filterProps, doImpls, doFields, doProps;
|
bool filterFields, filterProps, doImpls, doFields, doProps;
|
||||||
@ -618,6 +634,18 @@ namespace lib
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(!isImm)
|
||||||
|
{
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var imm = obj as imm.Imm;
|
||||||
|
var newObj = imm.Record( $"From XML {fromStr}:{elem.ParentNode?.Name}{elem.Name}" );
|
||||||
|
return newObj;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static bool FilterField( bool filterFields, bool doImpls, HashSet<string> whitelistFields, MemberInfo mi, string name )
|
private static bool FilterField( bool filterFields, bool doImpls, HashSet<string> whitelistFields, MemberInfo mi, string name )
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user